<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">var graph_lib=function(t){function e(s){if(i[s])return i[s].exports;var n=i[s]={exports:{},id:s,loaded:!1};return t[s].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){t.exports=i},,,,,function(t,e,i){"use strict";i(27),i(18),i(19),i(24),i(20),i(23),i(21),i(22)},,,function(t,e){"use strict";!function(){var e=function t(e){_.bindAll(this,"zoomOutOnClick","zoomToDataSlice"),this.setupGlobalEvents(),this.canvasId=e.canvasId,this.uniqueClass=e.canvasId+"_sg",this.$canvas=$("#"+this.canvasId),this.canvas=this.$canvas.get(0),"undefined"!=typeof FlashCanvas&amp;&amp;"undefined"==typeof document.getElementById(this.canvasId).getContext&amp;&amp;FlashCanvas.initElement(document.getElementById(this.canvasId)),this.ctx=document.getElementById(this.canvasId).getContext("2d"),this.$canvas.addClass("sample-graph"),this.options=_.clone(t.defaultOptions),this.trigger("configure"),_.extend(this.options,e),this.data(e.data||[]),this._xAxisType=e.xAxisType||"distance",this.metricsEnabled([]),this.nearestPixel=!1,this.minPaddingPct=.05,this.defaultStrokeStyle="black",this.defaultFillStyle="black",this.setInitialCanvasState(),this.plotMargin({top:7}),this.trigger("initialize:after"),this.render()};_.extend(e,Backbone.Events),_.extend(e.prototype,Backbone.Events,{bindTo:function(t,e,i){t.bind(e,i);var s=this._externalBindings||(this._externalBindings={}),n=s[e]||(s[e]=[]);n.push([t,i])},unbindFrom:function(t,e,i){t.unbind(e,i);var s=this._externalBindings;if(!s)return this;var n=s[e];if(!n)return this;for(var o=0,a=n.length;o&lt;a;o++)if(n[o]&amp;&amp;t===n[o][0]&amp;&amp;i===n[o][1]){n[o]=null;break}},unloadBindings:function(){this.trigger("unload_bindings:before"),_.each(this._externalBindings,function(t,e){_.each(t,function(t){t&amp;&amp;t[0].unbind(e,t[1])})}),this._externalBindings={}},set:function(t,e){t&amp;&amp;e?this.options[t]=e:_.extend(this.options,t)},get:function(t){return this.options[t]},setupGlobalEvents:function(){this.bind("all",function(){var t=Array.prototype.slice.call(arguments,1);e.trigger.apply(e,[arguments[0],this].concat(t))},this)},primaryMetric:function(){var t=this.metricsEnabled();if(0!==t.length)return this.metrics(t[0])},xAxisType:function(t){return t&amp;&amp;t!=this._xAxisType&amp;&amp;(this._xAxisType=t,this.trigger("xAxisType:change")),this._xAxisType},strokeStyle:function(t){return this.options.strokes[t]},fillStyle:function(t){return"unpaved"===t?this.surfacePattern():this.options.fills[t]},plotMargin:function(t){return t&amp;&amp;(this._plotMargin||(this._plotMargin={top:0,right:0,bottom:0,left:0}),_.extend(this._plotMargin,t),this.plotWidth=this.width()-1-this._plotMargin.left-this._plotMargin.right,this.plotHeight=this.height()-1-this._plotMargin.top-this._plotMargin.bottom),this._plotMargin},width:function(){return this.$canvas.width()},height:function(){return this.$canvas.height()},showSurface:function(t){if(void 0!==t)return void(this._showSurface=t);if(void 0===this._showSurface){var e=this.options.showSurface;void 0===e&amp;&amp;(e=Routes.activeMap&amp;&amp;Routes.activeMap.activeRoute.showSurface),void 0===e&amp;&amp;("planner"===this.options.segmentSelectorMode||this.metricsCalculator().hasSurface()),this._showSurface=e}return this._showSurface},toggleShowSurface:function(){this.showSurface(!this.showSurface())},resize:function(t,e){t||(t=this.$canvas.parent().width()),e||(e=this.$canvas.parent().height()),this.canvas.width=t;var i=this.options.plotOnly?0:$(".sg-bar").height()||25;this.canvas.height=e-i,this.$canvas.offset({top:this.$canvas.parent().offset().top+$(".sg-bar").height()}),this.setInitialCanvasState(),this.render(!0),this.trigger("resize")},setInitialCanvasState:function(){this.ctx.translate(.5,.5),this.ctx.strokeStyle=this.defaultStrokeStyle,this.ctx.fillStyle=this.defaultFillStyle,this.ctx.save()},zoomedIn:function(){return!!this.zoomedSlice()},zoomedSlice:function(t,i){return t&amp;&amp;(e.globalOptions.globalZoom?(this.unbindFrom(this,"pointselected",this.zoomOutOnClick),this.bindTo(this,"pointselected",this.zoomOutOnClick),i||(this._data._zoomedSlice=t,this.unbindFrom(this._data,"zoom:in",this.zoomToDataSlice),this._data.trigger("zoom:in",t,!0),this.bindTo(this._data,"zoom:in",this.zoomToDataSlice))):(this._zoomedSlice||this.bindTo(this,"pointselected",this.zoomOutOnClick),this._zoomedSlice=t)),e.globalOptions.globalZoom?this._data._zoomedSlice:this._zoomedSlice},zoomToDataSlice:function(t,e){this.zoomedSlice(t,e),this.trigger("zoom:in",t),this.render()},zoomOutOnClick:function(t,e){this.zoomOut(e),this.unbindFrom(this,"pointselected",this.zoomOutOnClick)},zoomOut:function(t){e.globalOptions.globalZoom&amp;&amp;!t?(delete this._data._zoomedSlice,this.unbindFrom(this._data,"zoom:out",this.zoomOutOnClick),this._data.trigger("zoom:out",null,!0),this.bindTo(this._data,"zoom:out",this.zoomOutOnClick)):this._zoomedSlice&amp;&amp;delete this._zoomedSlice,this.trigger("zoom:out"),this.render()},metricsEnabled:function(t){if(t){this.plotMetaData||(this.plotMetaData={time:{},distance:{}}),_.each(t,function(t){this.plotMetaData[t]||(this.plotMetaData[t]={})},this),t.length&gt;0&amp;&amp;this.showSurface()&amp;&amp;this._metricsEnabled.indexOf("surfaces")===-1&amp;&amp;t.push("surfaces");var e={ele:1,surfaces:2,cad:3,hr:4,speed:5,watts:6,grade:7};this._metricsEnabled=_.sortBy(t,function(t){return e[t]}),this._metricVariationInUse={}}return this._metricsEnabled},metricVariationInUse:function(t){if(this._metricVariationInUse[t])return this._metricVariationInUse[t];var e=_.find(this.metricsEnabled(),function(e){return this.metrics(e).isComputed()&amp;&amp;this.metrics(e).baseMetricKey()==t},this);return e||t},pointsAroundToX:function(t){var e=this.data(),i=this.xAxisType();if(!(t.highI&gt;e.length-1)){var s=e[t.highI][i]-e[t.lowI][i],n=e[t.lowI][i]+s*t.pct;return this.plotToPixel(n)}},pointsAroundX:function(t,e){var i,s,n=this.dataToRender();return this.zoomedIn()&amp;&amp;(i=this.zoomedSlice().i),"pixel"==e?(s=this._data.pointsAroundX(this.pixelToPlot(t),this.xAxisType(),n,i),s.x=t):s=this._data.pointsAroundX(t,e,n,i),s},canvasXToDataI:function(t){return this.pointsAroundX(t,"pixel")},pixelToPlot:function(t,e,i){var s,n;return t&amp;&amp;(t-=this._plotMargin.left,s=t/this.xRatio+this.xMin),e&amp;&amp;(e=this.plotHeight-(e-this._plotMargin.top),n=e/this.plotMetaData[i].ratio+this.plotMetaData[i].min),_.isNumber(t)?_.isNumber(e)?{x:s,y:n}:s:n},plotToPixel:function(t,e,i){var s,n,o=this.nearestPixel;return(t||0==t)&amp;&amp;(s=(t-this.xMin)*this.xRatio+this._plotMargin.left,o&amp;&amp;(s=Math.round(s))),(e||0==e)&amp;&amp;(n=this.plotHeight-(e-this.plotMetaData[i].min)*this.plotMetaData[i].ratio+this._plotMargin.top,o&amp;&amp;(n=Math.round(n))),isNaN(s)&amp;&amp;(s=0),isNaN(n)&amp;&amp;(n=0),t||0==t?e||0==e?{x:s,y:n}:s:n},data:function(t){if(t){var e=!1;this._data&amp;&amp;this._data===t&amp;&amp;(e=!0),t.points&amp;&amp;t.metricsCalculator?(this._data=t,t._zoomedSlice&amp;&amp;(this.zoomedSlice(t._zoomedSlice,!0),this.trigger("zoom:in",t._zoomedSlice))):this._data?this._data.points(t):this._data=new rwgps.Data(t);var i=this.metricsX();1==i.length&amp;&amp;i[0].key()!=this.xAxisType()&amp;&amp;this.xAxisType(i[0].key()),e||(this.bindTo(this._data,"zoom:out",this.zoomOutOnClick),this.bindTo(this._data,"zoom:in",this.zoomToDataSlice),this.bindTo(this._data,"points:change",function(){this.trigger("data:change")},this)),this.resetMetrics(),this.trigger("data:change")}return this._data.points()},resetMetrics:function(){delete this._metrics;var t=_.filter(this.metricsEnabled(),function(t){return this.metrics(t)},this);0===t.length&amp;&amp;(this.metrics("ele")?(t.push("ele"),("planner"===this.options.segmentSelectorMode||this.showSurface())&amp;&amp;t.push("surfaces")):this.metricsY().length&gt;0&amp;&amp;"surfaces"!==this.metricsY()[0].key()&amp;&amp;t.push(this.metricsY()[0].key())),this.metricsEnabled(t),this.metrics(this.xAxisType())||this.metricsX().length&gt;0&amp;&amp;this.xAxisType(this.metricsX()[0].key())},dataToRender:function(){return this.zoomedIn()?this.zoomedSlice().points():this.data()},metricsCalculator:function(){return this._data.metricsCalculator()},metricsCalculatorForDataToRender:function(){return this.zoomedIn()?this.zoomedSlice().metricsCalculator():this.metricsCalculator()},metricsKeys:function(){return _.map(this.metricsWithComputed(),function(t){return t.key()})},metricsY:function(){return _.filter(this.metrics(),function(t){return"y"==t.axis()})},metricsX:function(){return _.filter(this.metrics(),function(t){return"x"==t.axis()})},metricsKeysY:function(){return _.map(this.metricsY(),function(t){return t.key()})},metricsWithComputed:function(){return this.metrics("all")},metrics:function(t){var e=this.metricsCalculatorForDataToRender();if(!this._metrics||this._metrics.length&lt;=1){for(var i=this._cachedMC=e.enabledMetrics(),s={},n=0;n&lt;i.length;n++)if(i[n].indexOf("_")!=-1){var o=i[n].split("_"),a=o[0],r=o[1],h=o[2];s[a]||(s[a]=this.createMetric(a));var l=this.createMetric(i[n],{type:r,variant:h});s[a].addComputed(l),s[l.key()]=l}else s[i[n]]||(s[i[n]]=this.createMetric(i[n]));e.hasDistance()&amp;&amp;(s.distance=this.createMetric("distance",{axis:"x"})),e.hasTime()&amp;&amp;(s.time=this.createMetric("time",{axis:"x"})),this._metricsWithComputed=_.map(s,function(t){return t}),this._metrics=_.filter(this._metricsWithComputed,function(t){return!t.isComputed()}),this._metricsByKey=s}return"all"==t?this._metricsWithComputed:t?this._metricsByKey[t]:this._metrics||[]},preRender:function(){for(var t=this.dataToRender(),i=this.metricsCalculatorForDataToRender(),s=this.metricsEnabled();s.indexOf("surfaces")&gt;=0;)s.remove(s.indexOf("surfaces"),1);this.yAxisWidth=40,this.plotMargin({left:Math.ceil(s.length/2)*this.yAxisWidth,right:Math.max(10,Math.floor(s.length/2)*this.yAxisWidth),bottom:this.xAxisOuterHeight()});for(var n=_.bind(function(t,i,s,n,o,a){s==i&amp;&amp;(s+=1,i-=1),"ele"==t&amp;&amp;!this.zoomedIn()&amp;&amp;s-i&lt;45&amp;&amp;(s+=45-(s-i));var r,h,l=this.metrics(t),c=e.looseLabels(l.convert(i),l.convert(s),n),d=c.tickValues.length,g=l.inverseConvert(c.tickValues[0]),u=l.inverseConvert(c.tickValues[d-1]),p=this.plotMetaData[t];o?(p.min=i,r=1):(p.min=g,r=0),a?(p.max=s,h=d-1):(p.max=u,h=d),p.tickValues=c.tickValues.slice(r,h),p.nfrac=c.nfrac,p.ratio=this.plotHeight/(p.max-p.min)},this),o=Math.round(this.plotHeight/20),a=0;a&lt;s.length;a++){var r=s[a],h=i.getMetric(r,"_max"),l=i.getMetric(r,"_min"),c=l-.05*(h-l);n(r,"ele"==r?c:l,h,o,"ele"==r,!1)}var d=this.xAxisType();n(d,t[0][d],t[t.length-1][d],Math.floor(this.plotWidth/60),!0,!0)},render:function(t){if(!(this.dataToRender().length&lt;2))if(t)this.synchronousRender();else{var e=this;this._renderId&amp;&amp;cancelAnimationFrame(this._renderId),this._renderId=requestAnimationFrame(function(){e.synchronousRender()})}},clearAll:function(){this.clearBeforeRender(),$("."+this.uniqueClass).remove()},unloaded:!1,unload:function(){this.unloaded=!0,this.unloadBindings(),this.clearAll()},synchronousRender:function(){if(!this.unloaded&amp;&amp;(this.clearBeforeRender(),0!==this.dataToRender().length)){this.preRender();for(var t=this.metricsEnabled(),e=this.plotMargin(),i=0;i&lt;t.length;i++){var s=i%2==0,n=s?e.left-this.yAxisWidth-i/2*this.yAxisWidth:this.width()-(e.right-(i+1)/2*this.yAxisWidth+this.yAxisWidth);this.drawYAxis(t[i],n),this.drawPlot(t[i]),"grade"==t[i]&amp;&amp;this.drawHorizontalLine(this.plotToPixel(null,0,"grade"),this.strokeStyle("grade"))}this.drawXAxis(),this.trigger("reflow"),this.trigger("render:after")}},xAxisConfig:function(){return this._xAxisConfig||(this._xAxisConfig=_.extend({},e.defaultXAxisConfig)),this._xAxisConfig},xAxisOuterHeight:function(){var t=this.xAxisConfig();return t.lineSideMargin+t.innerTicksLength+t.tickLabelMargin+t.tickLabelTextHeight+t.axisLabelMargin+t.axisLabelTextHeight},filters:function(t){return this._filters||(this._filters={}),t&amp;&amp;_.extend(this._filters,t),this._filters},zIndex:function(t){return this._nextZIndex||(this._nextZIndex=2e3),this._nextZIndex++ +(t?1e3*t:0)},formatNumber:function(t,e,i){if("time"==e)return this.plotMetaData[e].nfrac&gt;0||i?rwgps.LabelMaker.durationLabel(Math.round(60*t)):rwgps.LabelMaker.durationLabel(Math.round(60*t),!0);var s=this.plotMetaData[e].nfrac;return i&amp;&amp;(s+=1),0==s&amp;&amp;t&gt;990&amp;&amp;"gi"!=rwgps.site?Math.round(.01*t)/10+"k":t.toFixed(s)},dataSlice:function(t,e){return new rwgps.DataSlice(this,t,e)},createMetric:function(t,i){return new e.Metric(this,t,i)},partitionByDistanceFraction:function(t){this.partition(this._data.partitionByDistanceFraction(t))},partition:function(t){return void 0!==t&amp;&amp;(this.zoomedIn()&amp;&amp;this.zoomOutOnClick(),this._partition=t,this.trigger("partition:change",t)),this._partition},surfacePattern:function(){return this.ctx.createPattern(this.unpavedPattern(),"repeat")}}),e.niceNum=function(t,e){var i,s,n;return i=Math.floor(Math.log(t)/Math.LN10),s=t/Math.pow(10,i),n=e?s&lt;1.5?1:s&lt;3?2:s&lt;7?5:10:s&lt;=1?1:s&lt;=2?2:s&lt;=5?5:10,n*Math.pow(10,i)},e.looseLabels=function(t,i,s){var n,o,a,r,h,l,c=[];if(0!=t){var d=t-.005*(i-t);t=t&gt;0&amp;&amp;d&lt;0?0:d}for(h=e.niceNum(i-t,!1),o=e.niceNum(h/(s-1),!0),a=Math.floor(t/o)*o,r=Math.ceil(i/o)*o,n=Math.max(-Math.floor(Math.log(o)/Math.LN10),0),l=a;l&lt;=r+.5*o;l+=o)c.push(l);return{tickValues:c,nfrac:n}},e.Metric=function(t,i,s){if(this._graph=t,this._key=i,this._opts=s||{},"time"==i){var n=this._graph.data()[0].time;this.convert=function(t){return(t-n)/60},this.inverseConvert=function(t){return 60*t+n}}else this.convert=e.defaultUnitConversions[i]||e.identityFn,this.inverseConvert=e.defaultInverseUnitConversions[i]||e.identityFn;this._computed=[],this._axis=this._opts.axis||"y"},e.Metric.prototype={key:function(){return this._key},computed:function(){return this._computed},addComputed:function(t){this._computed.push(t)},isComputed:function(){return!!this._opts.type},computedType:function(){return this._opts.type},computedVariant:function(){return this._opts.variant},description:function(){return"ma"==this.computedType()?this.computedVariant()+"s moving avg":"UNSUPPORTED"},baseMetricKey:function(){return this.key().split("_")[0]},axis:function(){return this._axis}},e.defaultXAxisConfig={innerTicksLength:4,lineSideMargin:-1,tickLabelMargin:4,tickLabelTextHeight:10,axisLabelMargin:8,axisLabelTextHeight:10},e.defaultOptions={showXAxisLabel:!0,displayControls:!0,displayLightControls:!1,referenceTools:!1,editMenu:!0,saveMenu:!0,enableUndoRedo:!1,fills:{ele:"#cf635a",paved:"#cf635a",unknown:"#FAEFEE",excluded:"#cccccc"},strokes:{ele:"#ba676a",excluded:"#cccccc",hr:"#0048fb",grade:"#666666",cad:"#285c1d",speed:"#000000",watts:"#000000"}},e.globalOptions={globalZoom:!0,globalHighlight:!0},e.defaultUnitConversions={distance:rwgps.Convert.mToLong,ele:rwgps.Convert.mToShort,temp:rwgps.Convert.cToDeg,speed:rwgps.Convert.kmToLong},e.defaultInverseUnitConversions={distance:rwgps.Convert.longToM,ele:rwgps.Convert.shortToM,temp:rwgps.Convert.degToC,speed:rwgps.Convert.longToKm},e.identityFn=function(t){return t},e.availableMetrics=function(){return["ele","grade","hr","cad","speed","watts"]},e.unitsFor=function(t){switch(t){case"hr":return"bpm";case"cad":return"rpm";case"watts":return"watts";case"grade":return"percent";case"ele":return rwgps.LabelMaker.metric?"m":"ft";case"speed":return rwgps.LabelMaker.metric?"kph":"mph";case"distance":return rwgps.LabelMaker.metric?"km":"miles";case"temp":return rwgps.LabelMaker.metric?"deg_c":"deg_f"}},e._registeredModules={},e.registerModule=function(t){this._registeredModules[t]=!0},e.isModuleLoaded=function(t){return!!this._registeredModules[t]},t.exports=e}()},,,,,,,,,,function(t,e){"use strict";!function(t,e,i){t.registerModule("controls"),t.bind("initialize:after",function(t){t.bindTo(t,"reflow",t.repositionPlotToggles),t.bindTo(t,"data:change",t.drawPlotToggles),t.bindTo(t,"partition:change",t.drawPartitionControl),t.bindTo(t,"render:after",t.drawPartitionControl)});var s,n,o;_.extend(t.prototype,{drawPlotToggles:function(){!this.controlsBar&amp;&amp;this.get("displayControls")&amp;&amp;(this.controlsBar=new s({graph:this}))},drawPartitionControl:function(t){if(t||(t=this.partition()),this._partitionSeparators&amp;&amp;_.each(this._partitionSeparators,function(t){t.remove()}),!t)return void delete this._partitionSeparators;for(var e=t.slices(),i=this.$canvas.offset(),s=this.plotMargin(),n=this.xAxisType(),o=this._partitionSeparators=[],a=0;a&lt;e.length-1;a++){var r=e[a],h=this.plotToPixel(r.lastPoint()[n])+i.left-5,l=i.top+s.top,c=$('&lt;div&gt;&lt;div class="middle"&gt;&lt;/div&gt;&lt;/div&gt;').addClass(this.uniqueClass).addClass("sg-elem").addClass("sg-partition-separator").css({zIndex:this.zIndex(),position:"absolute"}).offset({top:l,left:h}).height(this.plotHeight).find(".middle").height(this.plotHeight).end().prependTo(this.$body);o.push(c)}},standardBoundsTestFn:function(t,e){return function(i,s){var n=t.offset(),o=t.width(),a=t.height();return e&amp;&amp;(n.left-=e,o+=2*e),i&gt;n.left&amp;&amp;i&lt;n.left+o&amp;&amp;s&gt;n.top&amp;&amp;s&lt;n.top+a}},inBoundsOfControl:function(t,e){if(!this.activeControlsBoundsTests)return!1;for(var i=this.activeControlsBoundsTests,s=i.tail;(i=i.next)!==s;)if(i.fn.call(this,t,e))return!0;return!1},addControlBoundsTest:function(t){var e=this.activeControlsBoundsTests||(this.activeControlsBoundsTests={}),i=e.tail||(e.tail=e.next={});i.fn=t,e.tail=i.next={}},removeControlBoundsTest:function(t){var e,i;if(e=i=this.activeControlsBoundsTests)for(;(e=e.next)&amp;&amp;e.next;){if(e.fn===t){i.next=e.next;break}i=e}},repositionPlotToggles:function(){this.controlsBar&amp;&amp;this.controlsBar.reposition()}}),s=Backbone.View.extend({className:"sg-bar",tmplId:"sg-tmpl-control-bar",metricsTmplId:"sg-tmpl-control-bar-metrics",initialize:function(){_.bindAll(this,"onSegmentSelect","onSegmentDeselect","renderMetricsToggles","updateDisplayOfIncludeInMetrics","referencePoint"),this.graph=this.options.graph,this.render(),this.$el.addClass(this.graph.uniqueClass),this.$el.prependTo(this.graph.$canvas.parent()),_.each(this.$(".dropdown-menu,.menu-container"),function(t){this.graph.addControlBoundsTest(this.graph.standardBoundsTestFn($(t)))},this),this.graph.bindTo(this.graph,"segmentselector:load",this.onSegmentSelect),this.graph.bindTo(this.graph,"segmentselector:unload",this.onSegmentDeselect),this.graph.bindTo(this.graph,"data:change",this.renderMetricsToggles),this.graph.bindTo(this.graph,"dataslice:select",this.updateDisplayOfIncludeInMetrics)},updateDisplayOfIncludeInMetrics:function(t){this.$el.find(".sg-controls-unexclude-from-metrics")[t.points().find(function(t){return t.excludeFromMetrics})?"show":"hide"]()},render:function(){return this.$el.html(t.template(this.tmplId,{graph:this.graph})),this.renderMetricsToggles(),this},renderMetricsToggles:function(){var e=_.map(this.graph.metricsY(),function(t){return t.key()});0===e.length?e=Routes.activeMap.activeRoute.showSurface?["ele","surfaces","grade"]:["ele","grade"]:e.indexOf("surfaces")&gt;0&amp;&amp;!Routes.activeMap.activeRoute.showSurface?e.remove(e.indexOf("surfaces"),0):_.isEqual(e,["surfaces"])&amp;&amp;e.unshift("ele"),this.$(".sg-controls-metrics").html(t.template(this.metricsTmplId,{metrics:e}));var i=this.graph.metricsEnabled();0===i.length&amp;&amp;(i=Routes.activeMap.activeRoute.showSurface?["ele","surfaces"]:["ele"]),_.each(i,function(t){this.$('.sg-controls-metrics a[data-metric="'+t+'"]').closest("li").addClass("active")},this)},events:{"click .sg-controls-re-center":"reCenter","click .sg-controls-deselect":"unload","click .sg-controls-zoom-out":"zoomOut","click .sg-controls-metrics a":"toggleMetric","click .sg-controls-minimize":"minimize","click .sg-controls-restore":"restore","click .sg-controls-expand-graphs":"expandGraphs","click .edit_menu a":"onModified","click .sg-controls-trim-ends":"crop","click .sg-controls-delete-selection":"removePoints","click .sg-controls-flatten-elevation":"flattenElevation","click .sg-controls-exclude-from-metrics":"excludeFromMetrics","click .sg-controls-unexclude-from-metrics":"unexcludeFromMetrics","click .sg-controls-change-color":"openChangeColor","click .sg-controls-remove-control-points":"removeControlPoints","click .sg-controls-remove-metric":"onRemoveMetricClick","click .sg-controls-save-route":"saveRoute","click .sg-controls-save-trip":"saveTrip","click .sg-controls-save-segment":"saveSegment","click .sg-controls-save-annotation":"saveAnnotation","click .sg-persist-ops .save":"save","click .sg-persist-ops .revert":"revert","click .sg-controls-reference-point":"toggleReferencePoint","click .sg-controls-reference-segment":"referenceSegment","click .sg-controls-undo":"undo","click .sg-controls-redo":"redo"},undo:function(){Routes.activeMap.undo()},redo:function(){Routes.activeMap.redo()},minimize:function(){Routes.activeMap.hideElevation(),this.$el.addClass("collapsed")},restore:function(){Routes.activeMap.showElevation(),this.$el.removeClass("collapsed")},expandGraphs:function(){this.graph.trigger("expand_graphs")},onSegmentSelect:function(){this.$(".sg-selection-tools").show(),this.reposition(),this.graph.resize()},toggleMetric:function(t){var e=$(t.target).closest("li");if(!e.hasClass("disabled")){var i=e.closest("ul").find(".active a");if(e.hasClass("active")){if(1===i.length)return;if("ele"===t.target.dataset.metric&amp;&amp;JSON.stringify(i.toArray().map(function(t){return t.dataset.metric}))===JSON.stringify(["ele","surfaces"]))return;if(e.removeClass("active"),"ele"===t.target.dataset.metric){var s=i.addBack().find('[data-metric="surfaces"]').closest("li");s.length&gt;0&amp;&amp;(this.graph.showSurface(!1),s.removeClass("active"),s.addClass("disabled"))}}else if(e.addClass("active"),"ele"===t.target.dataset.metric){var n=i.addBack().find('[data-metric="surfaces"]').closest("li");n.length&gt;0&amp;&amp;n.removeClass("disabled")}var o=e.closest("ul").find(".active a"),a=o.map(function(){return $(this).data("metric")});this.graph.metricsEnabled(a),"surfaces"===t.target.dataset.metric&amp;&amp;this.graph.toggleShowSurface(),this.graph.render()}},zoomOut:function(){this.graph.zoomedIn()?this.graph.zoomOutOnClick(null,!1):this.graph.recenterMap()},reCenter:function(){this.graph.segmentSelector.reCenter()},unload:function(){this.graph.segmentSelector.unload(),this.graph.resize()},onSegmentDeselect:function(){this.$(".sg-selection-tools").hide(),this.saveSelection&amp;&amp;this.closeSaveForm(),this.changeColor&amp;&amp;this.closeColorChange()},reposition:function(){this.$el.width(this.graph.width()),this.saveSelection&amp;&amp;this.saveSelection.reposition()},onModified:function(){"planner"!=this.graph.options.segmentSelectorMode&amp;&amp;(this.$(".sg-persist-ops").show(),this.reposition())},saveSegment:function(){this.saveSelection&amp;&amp;this.closeSaveForm(),this.saveSelection=new n({graph:this.graph}),this.saveSelection.showSaveSegmentForm()},saveAnnotation:function(){this.saveSelection&amp;&amp;this.closeSaveForm(),this.saveSelection=new n({graph:this.graph}),this.saveSelection.showSaveAnnotationForm()},saveTrip:function(){this.saveSelection&amp;&amp;this.closeSaveForm(),this.saveSelection=new n({graph:this.graph}),this.saveSelection.showSaveTripForm()},saveRoute:function(){this.saveSelection&amp;&amp;this.closeSaveForm(),this.saveSelection=new n({graph:this.graph}),this.saveSelection.showSaveRouteForm()},save:function(){var t=Routes.activeMap.activeRoute.toSaveObj(),e=rwgps.csrfParams(),i=this,s=this.$(".sg-persist-ops .save");e._method="put",e["route"==rwgps.config.assetType?"route":"trip"]={track_points:JSON.stringify(t.track_points)},$.post(rwgps.config.assetPath,e,function(){s.html("Save"),s.removeClass("disabled"),i.$(".sg-persist-ops").hide(),i.reposition(),$.jGrowl("Successfully updated "+rwgps.config.assetType+"!")}),s.addClass("disabled"),s.html("&lt;i class='icon-spinner icon-spin'&gt;&lt;/i&gt; Saving...")},revert:function(){e.location.reload()},toggleReferencePoint:function(){this._referencePointEnabled?this.disableReferencePoint():this.enableReferencePoint()},enableReferencePoint:function(){if(this.graph.segmentSelector){var t=this.graph.zoomedSlice();return this.graph.segmentSelector.unload(),this.enableReferencePoint(),void this.graph.zoomToDataSlice(t)}this.$(".sg-controls-reference-point").closest("li").addClass("active"),this.graph.bindTo(this.graph,"pointselected",this.referencePoint),this._revertDragBehaviorToSelectSegment="select_segment"==this.graph.segmentselectedBehavior,this.graph.setDragBehaviorToZoomIn(),this._referencePointEnabled=!0,this.graph.trigger("reference:point:mode_enabled")},disableReferencePoint:function(){this.$(".sg-controls-reference-point").closest("li").removeClass("active"),this.graph.unbindFrom(this.graph,"pointselected",this.referencePoint),this.graph.zoomedIn()&amp;&amp;this.graph.zoomOut(),this._revertDragBehaviorToSelectSegment&amp;&amp;(delete this._revertDragBehaviorToSelectSegment,this.graph.setDragBehaviorToSelectSegment()),this._referencePointEnabled=!1,this.graph.trigger("reference:point:mode_disabled")},referencePointEnabled:function(){return this._referencePointEnabled},referencePoint:function(t){this.disableReferencePoint(),this.graph.trigger("reference:point",t)},referenceSegment:function(){this.graph.trigger("reference:segment",this.dataSlice())},dataSlice:function(){return this.graph.segmentSelector.dataSlice},removePoints:function(){if("planner"===this.graph.options.segmentSelectorMode)return void this.removeSlice();var t=this.dataSlice();this.graph.segmentSelector.unload();var e=t.firstPoint(),i=(e.segment||e.nextSegment).route,s=i.map,n=i.removeSlice(t),o=i.lastSegment;if(n){s.removeRoute(n);var a=o.nextControlPoint.distance+o.nextControlPoint.distanceFromPoint(n.firstSegment.prevControlPoint)-n.firstSegment.prevControlPoint.distance;_.each(n.trackPoints(),function(t){t.distance+=a}),o.nextControlPoint.setNextSegment(n.firstSegment),o.slurpNext()}i.rebuildBounds(),i.redraw(),i.calculateMetrics()},crop:function(){var t=this.dataSlice();this.unloadWithoutRecenter();var e=t.firstPoint();(e.segment||e.nextSegment).route.cropTo(t),Routes.activeMap.activeRoute.redraw()},unloadWithoutRecenter:function(){var t=this.graph.segmentSelector;Routes.activeMap.withRecenterDisabled(function(){t.unload()})},flattenElevation:function(){var t=this.dataSlice(),e=t.firstPoint(),i=t.lastPoint(),s=this.graph.metricsCalculatorForDataToRender().hasDistance()?"distance":"time",n=e[s],o=(i.ele-e.ele)/(i[s]-e[s]);_.each(this.dataSlice().points(),function(t){t.ele=(t[s]-n)*o+e.ele}),this.graph.render(),this.unloadWithoutRecenter()},changeSurfaceTo:function(t){var e=this.dataSlice();e.points().forEach(function(e){e.surface=t,e.ghSurface=t,e.modified=!0});var i=Routes.activeMap.activeRoute;i.recalculatePolylines(),Routes.activeMap.drawRouteDistanceMarkers(),Routes.activeMap.drawCoursePointIcons(i.coursePoints()),Routes.activeMap.snapshot(),rwgps.Events.trigger("surfacesChanged"),this.graph.render(),this.unloadWithoutRecenter()},removeControlPoints:function(){var t=this.dataSlice(),e=t.firstPoint(),i=t.lastPoint(),s=e.segment||e.nextSegment||e.prevSegment,n=i.segment||i.prevSegment||i.nextSegment;if(s._segId!==n._segId){for(;s&amp;&amp;n&amp;&amp;s._segId!==n._segId&amp;&amp;s.nextSegment;)s.slurpNext(),s=e.segment||e.nextSegment||e.prevSegment,n=i.segment||i.prevSegment||i.nextSegment;if(i.segment){var o=_.indexOf(n.trackPoints,i);n.splitAfter(o-1)}if(e.segment){var a=_.indexOf(s.trackPoints,e);s.splitAfter(a-1)}this.unloadWithoutRecenter()}},excludeFromMetrics:function(t){var e=this.dataSlice();this.graph.segmentSelector.unload();var i=e.firstPoint(),s=e.lastPoint();[e.firstPoint(),e.lastPoint()].forEach(function(t){t.segment&amp;&amp;t.segment.splitAfter(t.segment.trackPoints.indexOf(t)-1)});var n=s.segment||s.prevSegment,o=n.route,a=i.nextSegment;do a.setExcludeFromMetrics(!(t===!0),!0);while((a=a.nextSegment)!==n.nextSegment&amp;&amp;a);o.redraw(),o.calculateMetrics(),Routes.activeMap.drawRouteDistanceMarkers(),Routes.activeMap.snapshot()},unexcludeFromMetrics:function(){this.excludeFromMetrics(!0)},openChangeColor:function(){this.changeColor=new o({graph:this.graph}),this.changeColor.showChangeColor()},changeColorTo:function(t){var e=this.dataSlice();this.graph.segmentSelector.unload();var i=e.firstPoint(),s=e.lastPoint();[e.firstPoint(),e.lastPoint()].forEach(function(t){t.segment&amp;&amp;t.segment.splitAfter(t.segment.trackPoints.indexOf(t)-1)});var n=s.segment||s.prevSegment,o=n.route,a=i.nextSegment;do a.color=t;while((a=a.nextSegment)!==n.nextSegment&amp;&amp;a);o.redraw(),Routes.activeMap.drawRouteDistanceMarkers(),Routes.activeMap.drawCoursePointIcons(o.coursePoints()),Routes.activeMap.snapshot()},onRemoveMetricClick:function(t){this.removeMetric($(t.currentTarget).data("metric"))},removeMetric:function(t){_.each(this.dataSlice().points(),function(e){e[t]=i}),this.graph.render()},closeSaveForm:function(){this.saveSelection.$el.remove(),delete this.saveSelection},closeColorChange:function(){this.changeColor.$el.remove(),delete this.changeColor},removeSlice:function(){var t=this.dataSlice();this.unloadWithoutRecenter();var e=t.firstPoint();(e.segment||e.nextSegment).route.removeSlice(t)}}),n=Backbone.View.extend({className:"sg-segment-selector-save-form",tmplId:"sg-tmpl-save-segment",initialize:function(){this.graph=this.options.graph,this.render(),this.$el.prependTo("body")},events:{"click .sg-cancel":"close","change .sg-save-segment select.matching_scope":"onMatchingScopeChange","keypress .sg-save-segment input.title":"onEnterSaveSegment","click .sg-save-segment .sg-save":"saveSegment","keypress .sg-save-annotation input.comment":"onEnterAnnotate","click .sg-save-annotation .sg-annotate":"annotate","keypress .sg-save-trip input.name":"onEnterSaveTrip","click .sg-save-trip .sg-save":"saveTrip","keypress .sg-save-route input.name":"onEnterSaveRoute","click .sg-save-route .sg-save":"saveRoute"},onMatchingScopeChange:function(){var t=this.$(".matching_scope").val();this.$(".matching_scope_dep").hide(),rwgps.config.currentUser.account_level&lt;2&amp;&amp;("user"==t||"group"==t||"event"==t)?(this.$(".matching_scope_restricted").show(),setTimeout(function(){this.$(".matching_scope").val("public")},500)):"group"==t?this.$(".matching_scope_group").show():"event"==t&amp;&amp;this.$(".matching_scope_event").show()},reposition:function(){var t,e=this.graph.controlsBar.$(".sg-selection-tools a:first").offset();t=e.left-this.$el.width()/2,this.$el.offset({left:t,top:e.top-this.$el.height()-20})},render:function(){return this.$el.html(t.template(this.tmplId,{user:rwgps.config.currentUser,groups:rwgps.activeNs.adminGroups,events:rwgps.activeNs.adminEvents})).css({zIndex:this.graph.zIndex(),position:"absolute"}),this},showSaveSegmentForm:function(){this.$(".sg-save-segment").show(),this.$(".title").focus(),this.reposition()},showSaveAnnotationForm:function(){this.$(".sg-save-annotation").show(),this.$(".comment").focus(),this.reposition()},showSaveRouteForm:function(){this.$(".sg-save-route").show(),this.$(".name").focus(),this.reposition()},showSaveTripForm:function(){this.$(".sg-save-trip").show(),this.$(".name").focus(),this.reposition()},onEnterAnnotate:function(t){13==t.keyCode&amp;&amp;this.annotate()},onEnterSaveSegment:function(t){13==t.keyCode&amp;&amp;this.saveSegment()},onEnterSaveTrip:function(t){13==t.keyCode&amp;&amp;this.saveTrip()},onEnterSaveRoute:function(t){13==t.keyCode&amp;&amp;this.saveRoute()},close:function(){this.graph.controlsBar.closeSaveForm()},saveTrip:function(){var t=this.graph,e=t.controlsBar.dataSlice(),i=rwgps.csrfParams();i.i=e.i,i.count=e.count,i.name=this.$(".sg-save-trip .name").val(),$.post("/trips/"+rwgps.config.assetId+"/new_from_slice.json",i,function(e){$.jGrowl("New ride saved: &lt;a href='/trips/"+e.id+"'&gt;View ride&lt;/a&gt;"),t.segmentSelector.unload()})},saveRoute:function(){var t=this.graph,e=t.controlsBar.dataSlice(),i=rwgps.csrfParams();i.i=e.i,i.count=e.count,i.assetType=rwgps.config.assetType,i.assetId=rwgps.config.assetId,i.name=this.$(".sg-save-route .name").val(),$.post("/routes/new_from_slice.json",i,function(e){$.jGrowl("New route created: &lt;a href='/routes/"+e.id+"'&gt;View route&lt;/a&gt;"),t.segmentSelector.unload()})},saveSegment:function(){var t=this.graph,e=t.controlsBar.dataSlice(),i=this.$("input.title").val(),s=this.$("select.matching_scope").val();if(""==i.replace(/ /g,""))return void customAlert("Please enter a name for the segment before saving.");var n=JSON.stringify(_.map(_.filter(e.data(),function(t){return t.point}),function(t){return t.toMiniObj()})),o={title:i,matching_scope:s,points:n,created_from_type:this.graph.options.segmentCreatedFromType,created_from_id:this.graph.options.segmentCreatedFromId};"group"==s?o.group_id=this.$(".matching_scope_group select").val():"event"==s&amp;&amp;(o.event_id=this.$(".matching_scope_event select").val()),
$.post("/segments",{segment:o},function(e){t.trigger("segmentselector:create",e.segment),t.segmentSelector.unload()})},annotate:function(){var t=this.graph,e=t.controlsBar.dataSlice(),i=this.$("input.comment").val();if(""==i.replace(/ /g,""))return void customAlert("Please enter an annotation, which is just a comment on the selected segment.");var s={first_i:e.i,count:e.count,comment:i};$.post("/"+this.graph.options.segmentCreatedFromType+"s/"+this.graph.options.segmentCreatedFromId+"/annotate_segment.json",{segment:s},function(){t.segmentSelector.unload()}),this.graph.trigger("annotation:added",s)}}),o=Backbone.View.extend({className:"sg-segment-selector-change-color",tmplId:"sg-tmpl-change-color",initialize:function(){this.graph=this.options.graph,this.render(),this.$el.prependTo("body")},events:{"click .sg-cancel":"close"},render:function(){return this.$el.html(t.template(this.tmplId,{})).css({zIndex:this.graph.zIndex(),position:"absolute"}),this},changeColorTo:function(t){this.graph.controlsBar.changeColorTo(t)},showChangeColor:function(){this.$(".color_picker").colorPicker({click:_.bind(function(t){this.changeColorTo(parseInt("0x"+t.split("#")[1]))},this),defaultColor:999,color:Routes.colors,columns:7}),this.reposition()},reposition:n.prototype.reposition,close:function(){this.graph.controlsBar.closeColorChange()}})}(SampleGraph,window)},function(t,e){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,i=Array(t.length);e&lt;t.length;e++)i[e]=t[e];return i}return Array.from(t)}!function(t,e,s){_.extend(t.prototype,{drawHorizontalLine:function(t,e){var i=this.ctx,s=this.plotMetaData[this.xAxisType()],n=this.plotToPixel(s.min),o=this.plotToPixel(s.max);i.beginPath();for(var a=6,r=6;n+a&lt;=o;)i.moveTo(n,t),n+=a,i.lineTo(n,t),n+=r;e?(i.strokeStyle=e,i.stroke(),i.restore(),i.save()):i.stroke()},drawXAxis:function(){var t,e=this.xAxisConfig(),i=this.height()-this.plotMargin().bottom,s=this.xAxisType(),n=this.metrics(s),o=n.inverseConvert,a=this.plotMetaData[s],r=a.min,h=a.max,l=a.tickValues,c=l.length,d=this.ctx,g=this.plotToPixel(h),u=this.plotToPixel(r),p=i+e.lineSideMargin;d.beginPath(),d.moveTo(u,p),d.lineTo(g,p);for(var m=0;m&lt;c;m++){var f,v=l[m],_=o(l[m]);f=this.plotToPixel(_);var b=e.innerTicksLength,x=p+b;d.moveTo(f,p),d.lineTo(f,x),t=this.formatNumber(v,s),this.placeText(t,f,Math.round(p+e.tickLabelMargin),{align:"center"})}t=this.xAxisLabel(),this.get("showXAxisLabel")&amp;&amp;this.placeText(t,this.plotWidth/2+this.plotMargin().left,p+e.innerTicksLength+e.tickLabelMargin+e.tickLabelTextHeight,{align:"center"}),d.stroke()},xAxisLabel:function(){var e,i=this.xAxisType(),s="distance"==i?"time":"distance";return e="distance"==i?T.t("sample_graph.distance_in")+" "+T.t("sample_graph."+t.unitsFor(i)):T.t("sample_graph.time_from_start"),2==this.metricsX().length&amp;&amp;(e+=" (&lt;a href='javascript:;' class='sample-graph-x-axis-use-"+s+"'&gt;"+T.t("sample_graph.switch_to")+" "+T.t("sample_graph."+s)+"&lt;/a&gt;)"),e},placeText:function(t,e,i,s){s||(s={});var n=this.canvasToPageCoords(e,i),o=$("&lt;span&gt;"+t+"&lt;/span&gt;").addClass(this.uniqueClass).addClass("sg-elem").addClass("sample-graph-render-text").css({zIndex:this.zIndex()}).prependTo(this.$canvas.parent());switch(s.align){case"center":n.x-=o.width()/2;break;case"right":n.x-=o.width()}switch(s.vAlign){case"middle":n.y-=o.height()/2-1}return o.offset({top:n.y,left:n.x}),o},drawYAxis:function(e,i){if("surfaces"!==e){var s=this.metrics(e),n=s.baseMetricKey(),o=i+this.yAxisWidth,a=i&lt;this.width()/2,r=s.inverseConvert,h=this.plotMetaData[e].tickValues,l=h.length,c=this.plotMetaData[e].min,d=this.plotMetaData[e].max,g=6,u=4,p=0,m=2,f=this.ctx,v=this.plotToPixel(null,d,e),_=this.plotToPixel(null,c,e),b=a?o-p:i+p,x=a?-1:1;f.beginPath();var S=this.strokeStyle(n);S&amp;&amp;"ele"!=e&amp;&amp;(f.strokeStyle=S,f.fillStyle=S),f.moveTo(b,v),f.lineTo(b,_);for(var M=0;M&lt;l;M++){var y,C=h[M],w=r(C);y="ele"!=e&amp;&amp;0==M?_:M==l-1?v:this.plotToPixel(null,w,e);var $=0==M||M==l-1?g:u,P=b+x*$;f.moveTo(b,y),f.lineTo(P,y);var k=this.formatNumber(C,e);this.placeText(k,P+x*m,y,{align:a?"right":"left",vAlign:"middle"})}var z=5,A=3;k=T.t("sample_graph."+n)+"&lt;br&gt;("+T.t("sample_graph."+t.unitsFor(n))+")",this.placeText(k,b+x*A,_+z,{align:a?"right":"left"}),f.stroke(),f.restore(),f.save()}},clearBeforeRender:function(){this.ctx.clearRect(0,0,this.$canvas.width(),this.$canvas.height()),$("."+this.uniqueClass+".sample-graph-render-text").remove()},makeSVG:function(e){var s=200,n=1e3,o=75,a=this.dataToRender(),r="distance",h=function(t,e){if(0===t)return 0;var i=t,s=1;i&lt;0&amp;&amp;(i*=-1,s=-1);var n=Math.pow(10,Math.floor(Math.log10(i))),o=i/n,a=o&lt;5?.5:5,r=Math[e](o/a);return n*r*a*s},l=this.metrics(r),c=function(t,e){return l.inverseConvert(h(l.convert(t),e))},d=c(a[0][r],"floor"),g=a[a.length-1][r],u=n/(g-d),p=this.metrics(e),m=function(t,e){return p.inverseConvert(h(p.convert(t),e))},f=m(this.plotMetaData[e].min,"floor"),v=m(this.plotMetaData[e].max,"ceil"),_=s/(v-f),b=function(t){return document.createElementNS("http://www.w3.org/2000/svg",t)},x=b("svg"),S=b("path"),T=function(t){return t*u},M=function(t){return s-(t-f)*_};x.setAttribute("width",n+2*o),x.setAttribute("height",s+2*o);var y=a.map(function(t){var i=T(t[r]),s=M(t[e]);return i+","+s}),C=["0,"+s].concat(i(y),[n+","+s]);S.setAttribute("d","M"+C.join("L")+"Z"),S.setAttribute("fill","#ffb370"),S.setAttribute("stroke","#f70"),S.setAttribute("stroke-width",2),S.setAttribute("transform","translate("+o+", "+o+")");var w=b("g");w.setAttribute("transform","translate("+o+","+(o+s+10)+")");var $=b("path");$.setAttribute("d","M0,0H"+n),$.setAttribute("stroke","#bbb"),$.setAttribute("stroke-width",2),w.appendChild($);var P=b("g");P.setAttribute("transform","translate("+o+","+(o+s+27)+")"),P.setAttribute("style","fill: #bbb; font-family: Helvetica, sans-serif; font-size: 12px;");for(var k=c((g-d)/8,"round"),z=0;z*k&lt;g;z++){var A=T(d+k*z),D=b("path");D.setAttribute("stroke","#bbb"),D.setAttribute("stroke-width",2),D.setAttribute("transform","translate("+A+",0)"),D.setAttribute("d","M0,0V5"),w.appendChild(D);var I=b("text"),O=this.metrics("distance").convert(d+k*z);I.textContent=this.formatNumber(O,"distance"),I.setAttribute("transform","translate("+A+",0)"),I.setAttribute("text-anchor","middle"),P.appendChild(I)}var R=b("text");R.textContent="distance ("+t.unitsFor(r)+")",R.setAttribute("transform","translate("+n/2+",20)"),R.setAttribute("text-anchor","middle"),P.appendChild(R);var B=b("g");B.setAttribute("transform","translate("+(o-10)+","+o+")");var F=b("path");F.setAttribute("d","M0,0V"+s),F.setAttribute("stroke","#bbb"),F.setAttribute("stroke-width",2),B.appendChild(F);var H=b("g");H.setAttribute("transform","translate("+(o-18)+","+(o+4)+")"),H.setAttribute("style","fill: #bbb; font-family: Helvetica, sans-serif; font-size: 12px;");for(var E=(v-f)/4,X=0;X&lt;=4;X++){var W=M(f+E*X),L=b("path");L.setAttribute("stroke","#bbb"),L.setAttribute("stroke-width",2),L.setAttribute("transform","translate(0,"+W+")"),L.setAttribute("d","M0,0H-5"),B.appendChild(L);var Z=b("text"),N=this.metrics(e).convert(f+E*X);Z.textContent=this.formatNumber(N,e),Z.setAttribute("transform","translate(0,"+W+")"),Z.setAttribute("text-anchor","end"),H.appendChild(Z)}var V=b("text");return V.textContent="elevation ("+t.unitsFor(e)+")",V.setAttribute("transform","translate(-40,"+s/2+") rotate(90)"),V.setAttribute("text-anchor","middle"),H.appendChild(V),x.appendChild(S),x.appendChild(w),x.appendChild(P),x.appendChild(B),x.appendChild(H),x},unpavedPattern:function(){if(this._unpavedPatternCanvas)return this._unpavedPatternCanvas;var t=document.createElement("canvas"),e=t.getContext("2d");return t.width=10,t.height=5,e.fillStyle="#FAEFEE",e.fillRect(0,0,4,t.height),e.fillStyle="#cf635a",e.fillRect(4,0,t.width,t.height),e.stroke(),this._unpavedPatternCanvas=t,this._unpavedPatternCanvas},drawPlot:function(t){if("surfaces"!==t){var e=this.ctx,i=this.plotWidth,n=this.dataToRender(),o=n.length,a=this.xAxisType(),r=n[0][a],h=n[o-1][a],l=i/(h-r),c=this.strokeStyle(t),d=this.filters(),g=this.fillStyle(t);this.xRatio=isFinite(l)?l:0,this.xMin=r;for(var u,p,m,f=!1,v=d[t],_=this.plotMargin().top+this.plotHeight,b=function(){e.lineTo(p,m),g&amp;&amp;(e.lineTo(p,_),e.lineTo(u,_),e.fillStyle=g,e.fill()),e.strokeStyle=c,e.stroke(),e.closePath()},x=0;x&lt;o;x++){var S=n[x][t];if(S===s||null===S||v&amp;&amp;!v(S))f&amp;&amp;!g&amp;&amp;(b(),f=!1);else{if(p=this.plotToPixel(n[x][a]),m=this.plotToPixel(null,S,t),"ele"===t)if(!n[x].excludeFromMetrics||0!==x&amp;&amp;n[x-1].excludeFromMetrics){if(x&lt;o-1&amp;&amp;n[x].excludeFromMetrics&amp;&amp;!n[x+1].excludeFromMetrics){if(b(),this.showSurface()){var T=rwgps.surfaces&amp;&amp;rwgps.surfaces.surfaceGroups,M=T[n[x].surface];g=this.fillStyle(M)}else g=this.fillStyle("ele");c=this.strokeStyle("ele"),f=!1}else if(!n[x].excludeFromMetrics&amp;&amp;this.showSurface()){var y=rwgps.surfaces&amp;&amp;rwgps.surfaces.surfaceGroups,C=n[x-1]&amp;&amp;y[n[x-1].surface],w=n[x]&amp;&amp;y[n[x].surface];(C&amp;&amp;w!==C||0===x)&amp;&amp;(x&gt;0&amp;&amp;b(),g=this.fillStyle(w),c=this.strokeStyle("ele"),f=!1)}}else x&gt;0&amp;&amp;b(),g=this.fillStyle("excluded"),c=this.strokeStyle("excluded"),f=!1;f?e.lineTo(p,m):(u=p,e.beginPath(),e.moveTo(p,m),f=!0)}}f&amp;&amp;b(),e.restore(),e.save()}}})}(SampleGraph,window)},function(t,e){"use strict";!function(t,e){t.registerModule("interaction"),t.bind("initialize:after",function(t){_.bindAll(t,"highlightPointUnderMouse","onMouseOut","beginDragSelect","switchToTimeXAxis","switchToDistanceXAxis","setDragBehaviorToZoomIn"),t.$body=$("body"),t.setupMouseMove(),t.$canvas.mousedown(function(e){0===e.button&amp;&amp;t.trigger("mousedown",e)}),t.bindTo(t,"hoverEl:created",function(){t.$hoverElHorizontal.mousedown(function(e){0===e.button&amp;&amp;t.trigger("mousedown",e)}),t.$hoverElVertical.mousedown(function(e){0===e.button&amp;&amp;t.trigger("mousedown",e)})}),t.bindMouseInteractions(),t.bindTo(t,"zoom:in",t.defaultMouseOutCleanup),t.bindTo(t,"zoom:out",t.defaultMouseOutCleanup),t.bindTo(t,"render:after",t.redrawOverlays),t.bindTo(t,"render:after",t.bindEvents),t.completeDragSelect=_.bind(t.completeDragSelect,t),t.setDragBehaviorToZoomIn()}),t.bind("unload_bindings:before",function(t){$(".sample-graph-render-text").off("click",".sg-on-drag-zoom-in",t.setDragBehaviorToZoomIn),$(".sample-graph-render-text").off("click",".sample-graph-x-axis-use-time",t.switchToTimeXAxis),$(".sample-graph-render-text").off("click",".sample-graph-x-axis-use-distance",t.switchToDistanceXAxis)}),_.extend(t.prototype,{switchToTimeXAxis:function(){this.xAxisType("time"),this.render()},switchToDistanceXAxis:function(){this.xAxisType("distance"),this.render()},disableDragBehavior:function(){this.unbindFrom(this,"mousedown",this.beginDragSelect),$(".sg-zooming-tip").hide()},enableDragBehavior:function(){this.bindTo(this,"mousedown",this.beginDragSelect),$(".sg-zooming-tip").show()},setDragBehaviorToZoomIn:function(t){t&amp;&amp;$(t.target).hasClass("selected")||(this.segmentselectedBehavior="zoom_in",$(".sg-on-drag-zoom-in").addClass("selected"),$(".sg-on-drag-select-segment").removeClass("selected"),this._currentDragBehaviorFn&amp;&amp;this.unbindFrom(this,"segmentselected",this._currentDragBehaviorFn),this._currentDragBehaviorFn=this.zoomToDataSlice,this.bindTo(this,"segmentselected",this._currentDragBehaviorFn))},identifySegment:function(t){this.unidentifySegment();var e=this.$canvas.offset().left+this.plotMargin().left,i=e+this.plotWidth,s=t.points(0),n=t.lastPoint(),o=this.$canvas.offset(),a=o.left+Math.round(this.plotToPixel(s[this.xAxisType()])),r=o.left+Math.round(this.plotToPixel(n[this.xAxisType()]))-a;a&gt;i||a+r&lt;e||(a&lt;e&amp;&amp;(a=e),a+r&gt;i&amp;&amp;(r=i-a),this._identifiedSegment=t,this.$identifyOverlay=$("&lt;div&gt;&lt;/div&gt;").css({position:"absolute",zIndex:this.zIndex(),background:"#0000ff",filter:"alpha(opacity=30)",opacity:.3}).height(this.plotHeight).width(r).offset({top:this.$canvas.offset().top+this.plotMargin().top,left:a}).prependTo("body"))},unidentifySegment:function(){this.$identifyOverlay&amp;&amp;(this.$identifyOverlay.remove(),delete this.$identifyOverlay,delete this._identifiedSegment)},enableMouseInteractions:function(){this._mouseInteractionsDisabled=!1},disableMouseInteractions:function(){this._mouseInteractionsDisabled=!0},unbindMouseInteractions:function(){this._mouseInteractionsBound&amp;&amp;(this._mouseInteractionsBound=!1,this.unbindFrom(this,"mousemove",this.highlightPointUnderMouse),this.unbindFrom(this,"mouseout",this.onMouseOut),this.unbindFrom(this,"mousedown",this.beginDragSelect))},bindMouseInteractions:function(){this._mouseInteractionsBound||t.isModuleLoaded("playback")&amp;&amp;(this.isPlaying()||this.isPaused())||(this._mouseInteractionsBound=!0,this.bindTo(this,"mousemove",this.highlightPointUnderMouse),this.bindTo(this,"mouseout",this.onMouseOut),this.bindTo(this,"mousedown",this.beginDragSelect))},inPlotBounds:function(t,e){var i=this.$canvas.offset(),s=this.plotMargin(),n={top:i.top+s.top,left:i.left+s.left};return t&gt;n.left&amp;&amp;t&lt;n.left+this.plotWidth&amp;&amp;e&gt;n.top&amp;&amp;e&lt;n.top+this.plotHeight},onMouseOut:function(){this.defaultMouseOutCleanup()},setupMouseMove:function(){var t=this;this.bindTo(this.$body,"mousemove",_.throttle(function(e){if(!t._mouseInteractionsDisabled){var i=t.$canvas.offset(),s=t.plotMargin(),n={top:i.top+s.top,left:i.left+s.left};if(t.inPlotBounds(e.pageX,e.pageY)&amp;&amp;!t.inBoundsOfControl(e.pageX,e.pageY)){var o=t.eventToCanvasCoords(e,i);t.mouseCurrentlyOver||(t.trigger("mouseover",e),t.mouseCurrentlyOver=!0,t.mouseStillVerticallyOver=!0),t.trigger("mousemove",o.x,o.y,e)}else t.mouseCurrentlyOver&amp;&amp;(t.mouseCurrentlyOver=!1,t.trigger("mouseout",e)),!t.mouseStillVerticallyOver||e.pageY&gt;n.top&amp;&amp;e.pageY&lt;n.top+t.plotHeight||(t.mouseStillVerticallyOver=!1,t.trigger("verticalmouseout",e))}},20))},highlightPointUnderMouse:function(t){if(0!=this.dataToRender().length){var e=this.canvasXToDataI(t);this.highlightPoint(e),this.trigger("highlight_at_position",e)}},highlightPoint:function(t){var e=t.estimatedPoint;rwgps.Events.trigger("sg:highlightPoint",t),this.highlightPointAtX(e,t.x),this.showPointDetails(e,t.x)},highlightPointByIndex:function(t,e,i){if(!(this.dataToRender()&amp;&amp;t&gt;this.dataToRender().length)){i&amp;&amp;(t+=this.segmentSelector.dataSlice.i-this.zoomedSlice().i);var s=this.dataToRender()[t],n=this.plotToPixel(s[this.xAxisType()]);this.highlightPointAtX(s,n),e&amp;&amp;this.showPointDetails(s,n)}},highlightPointAtX:function(t,e){return this.$hoverElVertical||(this.$hoverElVertical=$("&lt;div&gt;&lt;/div&gt;").addClass("sg-elem").addClass("sg-hover").addClass("sg-hover-vertical-line").css({zIndex:this.zIndex()}).height(this.plotHeight).prependTo(this.$canvas.parent()),this.$hoverElHorizontal=$("&lt;div&gt;&lt;/div&gt;").addClass("sg-elem").addClass("sg-hover").addClass("sg-hover-horizontal-line").css({zIndex:this.zIndex()}).width(this.plotWidth).prependTo(this.$canvas.parent()),this.$hoverXLabel=$("&lt;span&gt;&lt;/span&gt;").addClass("sg-elem").addClass("sg-hover").addClass("sg-hover-x-label").css({zIndex:this.zIndex()}).prependTo(this.$canvas.parent()),this.trigger("hoverEl:created")),this._pointHighlighted={point:t,x:e},this.repositionPointHighlight(),t},repositionPointHighlight:function(){var t=this.primaryMetric();if(this._pointHighlighted&amp;&amp;this.$hoverElVertical&amp;&amp;t){var e=this.plotToPixel(null,this._pointHighlighted.point[t.key()],t.key()),i=this.$canvas.offset();this.$hoverElVertical.offset({top:i.top+this.plotMargin().top,left:i.left+this._pointHighlighted.x}),this.$hoverElHorizontal.offset({top:i.top+e,left:i.left+this.plotMargin().left});var s=this.xAxisType(),n=this.formatNumber(this.metrics(s).convert(this._pointHighlighted.point[s]),s,!0);this.$hoverXLabel.html(n),this.$hoverXLabel.offset({top:i.top+this.plotMargin().top+this.plotHeight,left:i.left+this._pointHighlighted.x-this.$hoverXLabel.outerWidth()/2})}},beginDragSelect:function(t){if(!this._mouseInteractionsDisabled&amp;&amp;0!=this.dataToRender().length){if(this.dragging)return void this.endDragSelect();document.body.focus(),document.onselectstart=function(){return!1},t.preventDefault(),this.dragging={$overlay:null,startX:this.eventToCanvasCoords(t).x},this.dragging.$overlay=$('&lt;div class="sg-segment-selector-control"&gt;&lt;/div&gt;').css({zIndex:this.zIndex(),background:"black",filter:"alpha(opacity=50)",opacity:.5,position:"absolute"}).offset({top:this.$canvas.offset().top+this.plotMargin().top}).height(this.plotHeight).prependTo(this.$canvas.parent()),this.bindTo(this,"mousemove",this.adjustSelection),this.bindTo(this,"mouseout",this.dragSelectMouseOut),this.bindTo(this,"verticalmouseout",this.cancelDragSelect),this.bindTo($(e),"mouseup",this.completeDragSelect),this.trigger("dragselect:begin")}},dragSelectMouseOut:function(t){var e=this.eventToCanvasCoords(t),i=this.plotMargin().left,s=i+this.plotWidth;e.x&lt;=i?this.adjustSelection(i):this.adjustSelection(s+1)},adjustSelection:function(t){var e,i=t-this.dragging.startX;e=i&lt;0?this.canvasToPageCoords(t)+1:this.canvasToPageCoords(this.dragging.startX),this.dragging.$overlay.width(Math.abs(i)).offset({top:this.$canvas.offset().top+this.plotMargin().top,left:e})},endDragSelect:function(){this.dragging.$overlay.remove(),delete this.dragging,document.onselectstart=null,this.unbindFrom(this,"mousemove",this.adjustSelection),this.unbindFrom(this,"verticalmouseout",this.cancelDragSelect),this.unbindFrom(this,"mouseout",this.dragSelectMouseOut),this.unbindFrom($(e),"mouseup",this.completeDragSelect),this.trigger("dragselect:end")},cancelDragSelect:function(){this.endDragSelect()},completeDragSelect:function(t){var e=this.eventToCanvasCoords(t),i=this.dragging.startX,s=e.x-i;if(this.endDragSelect(),Math.abs(s)&lt;=1){var n=this.canvasXToDataI(i);this.trigger("pointselected",n)}else{var o=s&lt;0?e.x:i,a=this.canvasXToDataI(o).closestI,r=this.canvasXToDataI(o+Math.abs(s)).closestI;if(r-a&gt;1){var h=this.dataSlice(a,1+r-a);this.trigger("segmentselected",h)}}},defaultMouseOutCleanup:function(){this.$hoverElHorizontal&amp;&amp;(this.$hoverElHorizontal.remove(),delete this.$hoverElHorizontal),this.$hoverElVertical&amp;&amp;(this.$hoverElVertical.remove(),delete this.$hoverElVertical),this.$hoverMetrics&amp;&amp;(this.$hoverMetrics.remove(),delete this.$hoverMetrics),this.$hoverXLabel&amp;&amp;(this.$hoverXLabel.remove(),delete this.$hoverXLabel),delete this._pointHighlighted},showPointDetails:function(e,i){this.$hoverMetrics||(this.$hoverMetrics=$("&lt;div&gt;&lt;/div&gt;").addClass("sg-elem").addClass("sg-hover-details").css({zIndex:this.zIndex()}).prependTo(this.$canvas.parent()),_.each(this.metricsKeysY(),function(t){"grade"!==t&amp;&amp;("surfaces"!==t||this.showSurface())&amp;&amp;this.$hoverMetrics.append('&lt;span class="sg-metric sg-'+t+'"&gt;&lt;/span&gt;&lt;br /&gt;')},this));var s=this.$hoverMetrics.width();this.$hoverMetrics.find(".metric").hide();var n=rwgps.LabelMaker.metric;_.each(this.metricsY(),function(i){var s=i.key(),o=e[this.metricVariationInUse(s)];if(_.isNumber(o)){var a;switch(s){case"ele":a=[Math.round(rwgps.Convert.mToShort(o)),n?" "+T.t("sample_graph.m"):" "+T.t("sample_graph.ft")],e.grade&amp;&amp;a.push(" (",e.grade.toFixed(1),T.t("sample_graph.percent"),")");break;case"grade":return;case"speed":a=[i.convert(o).toFixed(1),n?" "+T.t("sample_graph.kph"):" "+T.t("sample_graph.mph")];break;default:a=[Math.round(i.convert(o))," ",T.t("sample_graph."+t.unitsFor(s))]}}else a=this.showSurface()?[rwgps.surfaces.surfaceGroups[e.surface]," ",T.t("sample_graph.surface")]:[];this.$hoverMetrics.find(".sg-metric.sg-"+s).html(a.join("")).show(),"surfaces"===s&amp;&amp;this.$hoverMetrics.find(".sg-surfaces").width()&gt;this.$hoverMetrics.width()&amp;&amp;this.$hoverMetrics.width(this.$hoverMetrics.find(".sg-surfaces").width())},this),this.$hoverMetrics.width()&lt;s&amp;&amp;this.$hoverMetrics.width(s),this._pointHighlighted={point:e,x:i},this.repositionPointDetails()},bindEvents:function(){$(".sample-graph-render-text").on("click",".sg-on-drag-zoom-in",this.setDragBehaviorToZoomIn),$(".sample-graph-render-text").on("click",".sample-graph-x-axis-use-time",this.switchToTimeXAxis),$(".sample-graph-render-text").on("click",".sample-graph-x-axis-use-distance",this.switchToDistanceXAxis)},redrawOverlays:function(){if(this.$canvas.is(":hidden"))return $(".sg-elem").remove(),void this.unbindMouseInteractions();if(this.bindMouseInteractions(),this._pointHighlighted){var t=this._pointHighlighted.point;this.defaultMouseOutCleanup(),this._pointHighlighted={point:t,x:this.plotToPixel(t[this.xAxisType()])},this.highlightPointAtX(this._pointHighlighted.point,this._pointHighlighted.x),this.showPointDetails(this._pointHighlighted.point,this._pointHighlighted.x)}this.$zoomingTip&amp;&amp;(this.$zoomingTip.remove(),delete this.$zoomingTip),this.updateZoomingTip(),this._identifiedSegment&amp;&amp;this.identifySegment(this._identifiedSegment)},updateZoomingTip:function(){this.$zoomingTip||(this.$zoomingTip=$("&lt;span&gt;&lt;/span&gt;").addClass(this.uniqueClass).addClass("sg-elem").addClass("sg-zooming-tip").css({zIndex:this.zIndex()}).prependTo(this.$canvas.parent())),this.zoomedIn()?this.options.extendedSelectionOptions?this.$zoomingTip.html(['&lt;a href="javascript:;" class="sg-select-segment sg-bold"&gt;',T.t("sample_graph.select_segment"),"&lt;/a&gt; ",T.t("sample_graph.click_to_zoom_out")].join("")):this.$zoomingTip.html(T.t("sample_graph.click_to_zoom_out")):this.options.extendedSelectionOptions?(this.$zoomingTip.html([T.t("sample_graph.on_drag"),' &lt;a href="javascript:;" class="sg-on-drag-zoom-in"&gt;',T.t("sample_graph.zoom_in"),'&lt;/a&gt; &lt;a href="javascript:;" class="sg-on-drag-select-segment"&gt;',T.t("sample_graph.select_segment"),"&lt;/a&gt;"].join("")),$("zoom_in"==this.segmentselectedBehavior?".sg-on-drag-zoom-in":".sg-on-drag-select-segment").addClass("selected")):this.$zoomingTip.html(T.t("sample_graph.drag_to_zoom_in"));var t=this.$canvas.offset(),e=10+this.plotMargin().right,i=8;this.$zoomingTip.offset({left:t.left+this.$canvas.width()-this.$zoomingTip.width()-e,top:t.top+this.$canvas.height()-this.$zoomingTip.height()-i})},repositionPointDetails:function(){if(this._pointHighlighted&amp;&amp;this.$hoverMetrics){var t=75,e=this.$canvas.offset(),i=this.plotHeight&gt;t?(this.plotHeight-t)/2:0,s=15,n=20;this.$hoverMetrics.width()+this._pointHighlighted.x+s+n&gt;this.$canvas.width()?this.$hoverMetrics.offset({top:e.top+this.plotMargin().top+i,left:e.left+this._pointHighlighted.x-s-this.$hoverMetrics.outerWidth()}):this.$hoverMetrics.offset({top:e.top+this.plotMargin().top+i,left:e.left+this._pointHighlighted.x+s})}},eventToCanvasCoords:function(t,e){e||(e=this.$canvas.offset());var i=t.pageX-e.left,s=t.pageY-e.top;return{x:i,y:s}},canvasToPageCoords:function(t,e){var i,s,n=this.$canvas.offset();return(t||0==t)&amp;&amp;(i=t+n.left),(e||0==e)&amp;&amp;(s=e+n.top),t||0==t?e||0==e?{x:i,y:s}:i:s}})}(SampleGraph,window)},function(t,e){"use strict";!function(t){t.registerModule("map_bindings"),t.bind("initialize:after",function(t){Routes&amp;&amp;Routes.activeMap?t.initializeMapBindings():t._mapBindingsDisabled=!0}),_.extend(t.prototype,{initializeMapBindings:function(){this._onMapHighlightPoint=_.bind(this.onMapHighlightPoint,this),this._onMapUnHighlightPoint=_.bind(this.onMapUnhighlightPoint,this),this.bindTo(this,"highlight_at_position",this.highlightPositionOnMap),this.bindTo(this,"mouseout",this.unhighlightPositionOnMap),this.bindZoomWithMap(),this.bindTo(this,"dataslice:select",this.highlightDataSliceOnMap),this.bindTo(rwgps.Events,"map:highlight_point",this._onMapHighlightPoint),this.bindTo(rwgps.Events,"map:unhighlight_nearest_point",this._onMapUnHighlightPoint)},removeMapBindings:function(){this.unbindFrom(this,"highlight_at_position",this.highlightPositionOnMap),this.unbindFrom(this,"mouseout",this.unhighlightPositionOnMap),this.unbindZoomWithMap(),this.unbindFrom(this,"dataslice:select",this.highlightDataSliceOnMap),this.unbindFrom(rwgps.Events,"map:highlight_point",this._onMapHighlightPoint),this.unbindFrom(rwgps.Events,"map:unhighlight_nearest_point",this._onMapUnhighlightPoint)},bindZoomWithMap:function(){this.bindTo(this,"zoom:in",this.highlightDataSliceOnMap),this.bindTo(this,"zoom:out",this.onZoomOutUnhighlightOnMap)},disableMapHighlighting:function(){this.mapHighlightingDisabled||this._mapBindingsDisabled||(this.unbindZoomWithMap(),this.bindTo(this,"zoom:in",this.zoomToDataSliceOnMap),this.bindTo(this,"zoom:out",this.recenterMap),this.mapHighlightingDisabled=!0)},enableMapHighlighting:function(){this.mapHighlightingDisabled&amp;&amp;!this._mapBindingsDisabled&amp;&amp;(this.unbindFrom(this,"zoom:in",this.zoomToDataSliceOnMap),this.unbindFrom(this,"zoom:out",this.recenterMap),this.bindZoomWithMap(),this.mapHighlightingDisabled=!1)},revertMapHighlightedPoints:function(){this.segmentSelector?this.highlightDataSliceOnMap(this.segmentSelector.dataSlice,!0):this.zoomedSlice()?this.highlightDataSliceOnMap(this.zoomedSlice(),!0):rwgps.unhighlightPoints(!0)},unbindZoomWithMap:function(){this.unbindFrom(this,"zoom:in",this.highlightDataSliceOnMap),this.unbindFrom(this,"zoom:out",this.onZoomOutUnhighlightOnMap)},highlightPositionOnMap:function(t){rwgps.highlightPoint(t.highI,t.pct)},showMarker:function(t,e,i){rwgps.showMarker(t,e,i)},removeMarker:function(t){rwgps.removeMarker(t)},unhighlightPositionOnMap:function(){Routes.activeMap.unhighlightNearestPoint()},zoomToDataSliceOnMap:function(t){rwgps.zoomToPoints(t.i,t.i+t.count)},recenterMap:function(){Routes.activeMap.recenterMap()},highlightDataSliceOnMap:function(t,e,i){var s=function(){rwgps.highlightPoints(t.i,t.i+t.count,e)};i?s():_.defer(s)},onZoomOutUnhighlightOnMap:function(){rwgps.unhighlightPoints()},onMapHighlightPoint:function(t){if(this.zoomedIn()){var e=t.closestI,i=this.zoomedSlice();if(e&lt;i.i||e&gt;=i.i+i.count)return void this.defaultMouseOutCleanup()}var s=this.pointsAroundToX(t);if(s){var n=this.data()[t.closestI];this.highlightPointAtX(n,s),this.showPointDetails(n,s)}},onMapUnhighlightPoint:function(){this.mouseCurrentlyOver||this.defaultMouseOutCleanup()}})}(SampleGraph)},function(t,e){"use strict";!function(t){t.registerModule("playback"),t.bind("initialize:after",function(t){t.loopPlay=_.bind(t.loopPlay,t)}),_.extend(t.prototype,{playbackSpeed:1.5,setPlaybackSpeed:function(t){this.playbackSpeed=t},highlightPointAtTime:function(t){var e=this.pointsAroundX(t,"time"),i=this.pointsAroundToX(e),s=this.data()[e.closestI];this.highlightPointAtX(s,i),this.showPointDetails(s,i),this.trigger("highlight_at_position",e)},setPlaybackPercentage:function(t){var e=this.dataToRender();this._playing||this._paused||(this._paused=!0);var i=e[e.length-1].time;i||(i=e[e.length-2].time),this._playHead=e[0].time+t*(i-e[0].time)/100,this.highlightPointAtTime(this._playHead)},play:function(){if(!this._playing){var t=this.dataToRender();this._playHead&amp;&amp;this._paused||(this._playHead=t[0].time),this._playing=!0,this._paused=!1,this.unbindMouseInteractions(),this.loopPlay()}},isPlaying:function(){return this._playing},isPaused:function(){return this._paused},loopPlay:function(){if(this._playing){var t=this.dataToRender(),e=t[t.length-1].time;e||(e=t[t.length-2].time),this._playHead&lt;e?(this.highlightPointAtTime(this._playHead),this._playHead+=this.playbackSpeed,setTimeout(this.loopPlay,40)):this._playing=!1}},pause:function(){this._playing=!1,this._paused=!0},stopPlayback:function(){this._playing=this._paused=!1,this.bindMouseInteractions()}}),t.Playhead=function(t,e){var i=t.points();this.uniqueId=e,this._data=t,this._points=i,this.firstTime=i[0].time,this.maxTime=i[i.length-1].time||i[i.length-2].time,this.duration=this.maxTime-this.firstTime},t.Playhead.prototype={pointsAroundOffsetTime:function(t){var e=this.firstTime+t;if(e&lt;=this.maxTime)return this._data.pointsAroundX(e,"time");var i=this._data.pointsAroundX(this.maxTime,"time");return i.pastEnd=!0,i},points:function(){return this._points}},t.MultiTrackPlayhead=function(t){this.graph=t,this._playheads=[],this._currentTime=0,this.playbackSpeed=1.6,this._playing=!1,this._paused=!1,_.bindAll(this,"loopPlay")},t.MultiTrackPlayhead.prototype={addData:function(e){return this._playheads.push(new t.Playhead(e,this._playheads.length)),this._numPlayheads=this._playheads.length,this._playheads.length-1},play:function(){this._playing||(this._playing=!0,this._paused=!1,this.updatePauseAtTime(),this.loopPlay())},pause:function(){this._playing=!1,this._paused=!0},stopPlayback:function(){this._playing=this._paused=!1,this._currentTime=0,_.each(this._playheads,function(t){this.graph.removeMarker(t.uniqueId)},this)},maxDuration:function(){return this._maxDuration||(this._maxDuration=_.reduce(this._playheads,function(t,e){var i=e.maxTime-e.firstTime;return i&gt;t?i:t},0)),this._maxDuration},setPlaybackPercentage:function(t){this._currentTime=Math.round(this.maxDuration()*t/100),this.setTime(this._currentTime)},loopPlay:function(){if(this._playing){var t,e=this._currentTime+this.playbackSpeed;e&gt;this.pauseAtTime&amp;&amp;(t=!0,e=this.pauseAtTime),this._currentTime=e,this.setTime(e),t?(this._playing=!1,$("#play_pause_btn").removeClass("playing")):setTimeout(this.loopPlay,50)}},pauseOnAnyFinish:function(t){this._pauseOnAnyFinish=t,this.updatePauseAtTime()},updatePauseAtTime:function(){this._pauseOnAnyFinish?this.pauseAtTime=_.reduce(this._playheads,function(t,e){return e.duration&gt;this._currentTime&amp;&amp;(!t||t&gt;e.duration)?e.duration:t},null,this):this.pauseAtTime=_.reduce(this._playheads,function(t,e){return e.duration&gt;this._currentTime&amp;&amp;(!t||t&lt;e.duration)?e.duration:t},null,this)},setTime:function(t){for(var e,i=this._playheads,s=0,n=0;n&lt;this._numPlayheads;n++){e=i[n].pointsAroundOffsetTime(t);var o=i[n].points(),a=o[e.lowI],r=o[e.highI],h=e.x-i[n].firstTime;if(h&gt;s&amp;&amp;(s=h),a.point&amp;&amp;r.point){var l=a.point.lat,c=a.point.lng,d=r.point.lat,g=r.point.lng,u=(d-l)*e.pct+l,p=(g-c)*e.pct+c;this.graph.showMarker(p,u,i[n].uniqueId)}}this.largestReportedTime=s;var m=Math.round(100*s/this.maxDuration());$("#elapsed_time_slider").slider("option","value",m),$("#elapsed_time").html(rwgps.LabelMaker.durationLabel(Math.floor(s)))}}}(SampleGraph)},function(t,e){"use strict";!function(t){t.registerModule("segmentSelector"),t.bind("initialize:after",function(t){_.bindAll(t,"setDragBehaviorToZoomIn","setDragBehaviorToSelectSegment","selectSegmentFromZoom"),$(".sg-on-drag-select-segment").live("click",t.setDragBehaviorToSelectSegment),$(".sg-select-segment").live("click",t.selectSegmentFromZoom)}),t.bind("configure",function(t){_.extend(t.options,{recenterOnSelectSegment:!1,revertToZoomInAfterSelectSegment:!0})}),t.bind("unload_bindings:before",function(t){$(".sg-on-drag-select-segment").die("click",t.setDragBehaviorToSelectSegment)}),_.extend(t.prototype,{setDragBehaviorToSelectSegment:function(t){t&amp;&amp;$(t.target).hasClass("selected")||(this.segmentselectedBehavior="select_segment",$(".sg-on-drag-zoom-in").removeClass("selected"),$(".sg-on-drag-select-segment").addClass("selected"),this.unbindFrom(this,"segmentselected",this._currentDragBehaviorFn),this._currentDragBehaviorFn=this.selectSegment,this.bindTo(this,"segmentselected",this._currentDragBehaviorFn))},selectSegmentFromZoom:function(){this.selectSegment(this.zoomedSlice(),!0)},selectSegment:function(e,i){this.options._extendedSelectionOptions=this.options.extendedSelectionOptions,this.options.extendedSelectionOptions=!1,this.setDragBehaviorToZoomIn(),this.options.revertToZoomInAfterSelectSegment&amp;&amp;this.updateZoomingTip(),this.segmentSelector=new t.SegmentSelector({graph:this,dataSlice:e}),(i||this.options.recenterOnSelectSegment)&amp;&amp;this.segmentSelector.reCenter();var s=this;this.bindTo(this,"segmentselector:unload",function t(){s.options.revertToZoomInAfterSelectSegment&amp;&amp;(s.options.extendedSelectionOptions=this.options._extendedSelectionOptions),delete this.options._extendedSelectionOptions,s.updateZoomingTip(),delete s.segmentSelector,s.unbindFrom(s,"segmentselector:unload",t)}),this.trigger("segmentselector:load")}}),t.SegmentSelector=Backbone.View.extend({initialize:function(){var t=this.graph=this.options.graph,e=this.dataSlice=this.options.dataSlice;this.hidden=!1,_.bindAll(this,"addControlBoundsTest","removeControlBoundsTest","reposition","beginDragResize","adjustResize","dragResizeMouseOut","cancelDragResize","completeDragResize","cacheLastSelected","reCenter","updateSelected","unload"),this.throttledUpdateSelected=_.throttle(this.updateSelected,120);var i=2,s=5;this.handleWidth=i+s,this.$overlay=$('&lt;div&gt;&lt;div class="sg-handle sg-left"&gt;&lt;div class="sg-buffer"&gt;&lt;/div&gt;&lt;div class="sg-a"&gt;&lt;div class="sg-handle-circle"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="sg-segment-selector-middle"&gt;&lt;/div&gt;&lt;div class="sg-handle sg-right"&gt;&lt;div class="sg-a"&gt;&lt;div class="sg-handle-circle"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="sg-buffer"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;').addClass("sg-segment-selector-control").css({
zIndex:t.zIndex(5),position:"absolute"}).offset({top:t.$canvas.offset().top+t.plotMargin().top,left:100}).height(t.plotHeight).mousedown(this.beginDragResize).appendTo(t.$canvas.parent()).find(".sg-segment-selector-middle").height(t.plotHeight).end().find(".sg-handle").width(this.handleWidth).height(t.plotHeight).find(".sg-handle-circle").css({zIndex:t.zIndex(5),top:t.plotHeight/2-7}).end().find(".sg-buffer").width(s).height(t.plotHeight).end().find(".sg-a").width(i).height(t.plotHeight).end().end(),this.selectSlice(e),_.defer(_.bind(function(){this.reposition()},this)),this.overlayBoundsTests=[t.standardBoundsTestFn(this.$overlay.find(".sg-left"),5),t.standardBoundsTestFn(this.$overlay.find(".sg-right"),5)],t.defaultMouseOutCleanup(),this.addControlBoundsTest(),t.bindTo(t,"render:after",this.reposition),t.bindTo(t,"dragselect:begin",this.removeControlBoundsTest),t.bindTo(t,"dragselect:end",this.addControlBoundsTest),t.bindTo(t,"dataslice:select",this.cacheLastSelected),t.disableMapHighlighting()},unload:function(){var t=this.graph;this.removeControlBoundsTest(),t.unbindFrom(t,"render:after",this.reposition),t.unbindFrom(t,"dragselect:begin",this.removeControlBoundsTest),t.unbindFrom(t,"dragselect:end",this.addControlBoundsTest),t.unbindFrom(t,"dataslice:select",this.cacheLastSelected),t.enableMapHighlighting(),this.$overlay.remove(),t.zoomOut(),t.options.revertToZoomInAfterSelectSegment||t.setDragBehaviorToSelectSegment(),t.trigger("segmentselector:unload")},hide:function(){this.hidden=!0},show:function(){this.hidden=!1},reCenter:function(){this.graph.zoomToDataSlice(this.dataSlice.buffer(this.graph.xAxisType()))},cacheLastSelected:function(t){this.lastSelectedDataSlice=t},addControlBoundsTest:function(){_.each(this.overlayBoundsTests,function(t){this.graph.addControlBoundsTest(t)},this)},removeControlBoundsTest:function(){_.each(this.overlayBoundsTests,function(t){this.graph.removeControlBoundsTest(t)},this)},reposition:function(){var t=this.dataSlice.data(),e=this.graph,i=e.$canvas.offset(),s=i.left+Math.round(e.plotToPixel(t[0][e.xAxisType()])),n=i.left+Math.round(e.plotToPixel(t[t.length-1][e.xAxisType()]))-s,o=e.$canvas.offset().left+e.plotMargin().left,a=o+e.plotWidth;s+n&lt;o||s&gt;a||this.hidden?this.$overlay.hide():(this.$overlay.show(),s+n&gt;a?(n=a-s+1,this.$overlay.find(".sg-handle.sg-right").hide(),this.rightHidden=!0):s&lt;o?(n=s+n-o,s=o+this.handleWidth,this.$overlay.find(".sg-handle.sg-left").hide(),this.leftHidden=!0):(this.$overlay.find(".sg-handle.sg-right").show(),this.$overlay.find(".sg-handle.sg-left").show(),this.rightHidden=!1,this.leftHidden=!1),this.$overlay.offset({left:s-this.handleWidth,top:i.top+e.plotMargin().top}).height(e.plotHeight).find(".sg-segment-selector-middle").width(n).height(e.plotHeight).end().find(".sg-handle,.sg-buffer,.sg-a").height(e.plotHeight).end().find(".sg-handle-circle").css({zIndex:e.zIndex(5),top:e.plotHeight/2-7}))},beginDragResize:function(t){if(0===t.button){var e=this.graph;if(e.defaultMouseOutCleanup(),this.dragging)return void this.endDragResize();e.unbindMouseInteractions(),this.removeControlBoundsTest(),document.body.focus(),document.onselectstart=function(){return!1},t.preventDefault(),this.dragging={startX:e.eventToCanvasCoords(t).x,initialOffset:this.$overlay.offset(),initialWidth:this.$overlay.width()},$(t.target).closest(".sg-handle").hasClass("sg-left")?this.dragging.mode=1:$(t.target).closest(".sg-handle").hasClass("sg-right")?this.dragging.mode=3:this.leftHidden?this.dragging.mode=3:this.rightHidden?this.dragging.mode=1:this.dragging.mode=2,e.bindTo(e,"mousemove",this.adjustResize),e.bindTo(e,"mouseout",this.dragResizeMouseOut),e.bindTo(e,"verticalmouseout",this.cancelDragResize),e.bindTo(e.$body,"mouseup",this.completeDragResize)}},adjustResize:function(t){var e=this.dragging.startX-t,i=this.dragging,s=i.initialWidth-2*this.handleWidth,n=this.graph,o=this.graph.$canvas.offset(),a=n.plotMargin().left+o.left,r=a+n.plotWidth,h=i.initialOffset.left-e;if(1==i.mode)s+e&lt;1&amp;&amp;(e=1-s),s+=e,this.$overlay.offset({left:h}).find(".sg-segment-selector-middle").width(s);else if(2==i.mode){var l=this.$overlay.width();h=i.initialOffset.left-e+this.handleWidth,h&lt;a?h=a:h+l-2*this.handleWidth&gt;r&amp;&amp;(h=r-l+2*this.handleWidth),this.$overlay.offset({left:h-this.handleWidth})}else s-e&lt;1&amp;&amp;(e=s-1),s-=e,this.$overlay.find(".sg-segment-selector-middle").width(s);var c=this.graph.zoomedIn(),d=!c&amp;&amp;h===a,g=!c&amp;&amp;h+s===r;d&amp;&amp;!this.leftSnapped&amp;&amp;(this.$overlay.find(".sg-handle.sg-left").addClass("sg-snapped"),this.leftSnapped=!0),g&amp;&amp;!this.rightSnapped&amp;&amp;(this.$overlay.find(".sg-handle.sg-right").addClass("sg-snapped"),this.rightSnapped=!0),!d&amp;&amp;this.leftSnapped&amp;&amp;(this.$overlay.find(".sg-handle.sg-left").removeClass("sg-snapped"),this.leftSnapped=!1),!g&amp;&amp;this.rightSnapped&amp;&amp;(this.$overlay.find(".sg-handle.sg-right").removeClass("sg-snapped"),this.rightSnapped=!1),this.throttledUpdateSelected()},updateSelected:function(){if(this.dragging){var t=this.lastSelectedDataSlice,e=this.getUpdatedDataSlice();t&amp;&amp;t.i==e.i&amp;&amp;t.count==e.count||this.graph.trigger("dataslice:select",e,"only_metrics")}},getUpdatedDataSlice:function(){var t=this.graph,e=t.$canvas.offset(),i=this.$overlay.offset().left+this.handleWidth-e.left,s=3!=this.dragging.mode?t.canvasXToDataI(i).closestI:this.dataSlice.i,n=1==this.dragging.mode?this.dataSlice.lastI:this.graph.canvasXToDataI(i+this.$overlay.width()-2*this.handleWidth).closestI;return n==s&amp;&amp;(0==s?n++:s--),t.dataSlice(s,1+n-s)},dragResizeMouseOut:function(t){var e,i=this.graph,s=this.dragging,n=i.eventToCanvasCoords(t),o=i.plotMargin().left,a=o+i.plotWidth;1==s.mode&amp;&amp;n.x&lt;=o?(e=o-(s.initialOffset.left+this.handleWidth-i.canvasToPageCoords(s.startX)),this.adjustResize(e)):3==s.mode&amp;&amp;n.x&gt;=a&amp;&amp;(e=a+i.canvasToPageCoords(s.startX)-(s.initialOffset.left+s.initialWidth-this.handleWidth),this.adjustResize(e))},endDragResize:function(){var t=this.graph;delete this.dragging,document.onselectstart=null,t.bindMouseInteractions(),this.addControlBoundsTest(),t.unbindFrom(t,"mousemove",this.adjustResize),t.unbindFrom(t,"mouseout",this.dragResizeMouseOut),t.unbindFrom(t,"verticalmouseout",this.cancelDragResize),t.unbindFrom(t.$body,"mouseup",this.completeDragSelect)},cancelDragResize:function(){this.endDragResize(),this.reposition()},selectSlice:function(t){this.dataSlice=t,this.reposition(),this.graph.trigger("dataslice:select",t,"only_metrics")},completeDragResize:function(t){var e=this.graph.eventToCanvasCoords(t),i=this.dragging.startX,s=this.dragging.mode,n=e.x-i,o=this.getUpdatedDataSlice();if(this.endDragResize(),Math.abs(n)&lt;=1&amp;&amp;2===s){var a=this.graph.canvasXToDataI(i);this.graph.unbindFrom(this.graph,"pointselected",this.graph.zoomOutOnClick),this.graph.trigger("pointselected",a),this.graph.bindTo(this.graph,"pointselected",this.graph.zoomOutOnClick)}else this.selectSlice(o)}})}(SampleGraph)},function(t,e){"use strict";!function(t,e,i){t.registerModule("templates"),_.extend(t,{_compiledTemplates:{},template:function(t,e){var s=this._compiledTemplates;return s[t]||(s[t]=_.template(i("#"+t).html())),s[t](e)}})}(SampleGraph,window,jQuery)},,,function(t,e,i){(function(e){t.exports=e.SampleGraph=i(8)}).call(e,function(){return this}())}]);
//# sourceMappingURL=graph-98af3d313c064f2fd22b-bundle.js.map</pre></body></html>