var GPS=GPS?GPS:function(){function j(u){var t=typeof u;if(t==="object"){if(u){if(u instanceof Array){t="array"}}else{t="null"}}return t}var o={uk:{decsep:null,dist:"Km",elev:"m",vel:"Km/h",time:"h",heartrate:"bpm",labeldist:"Dist.",labeltime:"Time",labelelev:"Elev.",labelvel:"Vel.",labelheartrate:"H.R.",distFactor:1,elevFactor:1,velFactor:1,timeFactor:1,heartrateFactor:1,distDecs:2,elevDecs:0,velDecs:2,heartrateDecs:0,tagbuttonzoomfalse:"Select and zoom",tagbuttonzoomtrue:"Reset zoom",tagbuttonxaxisdist:"Show time in 'X' axis",tagbuttonxaxishour:"Show distance in 'X' axis",tagbuttonyaxiselev:"Show velocity in 'Y' axis",tagbuttonyaxisvel:"Show elevation in 'Y' axis",xaxistitledist:"Distance",xaxistitletime:"Time",yaxistitleelev:"Elevation",yaxistitlevel:"Velocity",yaxistitleheartrate:"Heart Rate",dateTimeFormat:"MM/dd/yyyy hh:mm:ss a"},es:{decsep:",",dist:"Km",elev:"m",vel:"Km/h",time:"h",heartrate:"ppm",labeldist:"Dist.",labeltime:"Tiempo",labelelev:"Alt.",labelvel:"Vel.",labelheartrate:"Pulso",distFactor:1,elevFactor:1,velFactor:1,timeFactor:1,heartrateFactor:1,distDecs:2,elevDecs:0,velDecs:2,heartrateDecs:0,tagbuttonzoomfalse:"Seleccionar y ampliar",tagbuttonzoomtrue:"Cancela ampliación",tagbuttonxaxisdist:"Muestra el tiempo en el eje 'X'",tagbuttonxaxishour:"Muestra la distancia en el eje 'X'",tagbuttonyaxiselev:"Muestra la velocidad en el eje 'Y'",tagbuttonyaxisvel:"Muestra la altitud en el eje 'Y'",xaxistitledist:"Distancia",xaxistitletime:"Tiempo",yaxistitleelev:"Altitud",yaxistitlevel:"Velocidad",yaxistitleheartrate:"Pulsaciones",dateTimeFormat:"dd/MM/yyyy HH:mm:ss"}};var i=o.uk;function g(s){this.size=2*s+1;var v=[];var u=[];var w=0;v.push({val:-10000000000,order:0});for(var t=1;t<=this.size+1;t++){v.push({val:10000000000,order:0})}this.push=function(y){var x;var C=0;if(w<this.size){w++}for(var A=1;A<=w;A++){if(v[A].order==this.size){v.splice(A,1);v.push({val:10000000000,order:0})}if(v[A].val>y&&v[A-1].val<=y){x=y;y=v[A].val;v[A].val=x;x=C;C=v[A].order;v[A].order=x}v[A].order++}var z=Math.floor((w+1)/2);var B=v[z].val;if(w%2!==0){u.push(B)}};this.shift=function(){return u.shift()}}function m(s,t){if(t!==undefined){s=(j(s)=="string")?parseFloat(s).toFixed(t):s.toFixed(t)}return(i.decsep?s.toString().replace(".",i.decsep):s)}function r(s){var u=Math.floor(s);var t=Math.floor((s-u)*60);return u+":"+(t<10?"0"+t:t)}function h(u){var s=/(-)?(\d{4})-(\d{2})-(\d{2})(T(\d{2}):(\d{2}):(\d{2})(\.\d+)?)?(Z|(([\+-])((\d{2}):(\d{2}))))?/;if(!u){return null}var t=new Date(u.replace(s,"$3/$4/$2 $6:$7:$8 GMT$12$14$15"));return(new Date(t.getTime()+1000*new Number(u.replace(s,"0$9"))))}function f(s,t){if(t!==undefined){if(j(t)=="array"){t.each(s)}else{s(t)}}}function a(u){var v=parseFloat(u["-lon"]);var t=parseFloat(u["-lat"]);var s=new l.Point(t,v);s.elev=u.ele?parseFloat(u.ele):null;s.time=h(u.time);s.vel=h(u.speed)*3.6;s.name=u.name||null;if(u.desc){s.html=u.desc;if(u.cmt&&(u.cmt!=u.desc)){s.html+="<br/>"+u.cmt}}else{if(u.cmt){s.html=u.cmt}}return s}function b(w,u){function v(y){var x=a(y);w.addTrackpoint(x)}function t(x){w.newSegment();f(v,x.trkpt)}function s(x){f(t,x.trkseg)}f(s,u)}function p(u,s){function t(w){var v=a(w);u.addWaypoint(v)}f(t,s)}function n(v,s){function t(x){var w=a(x);v.addRoutepoint(w)}function u(w){v.newRoute();w.rtept.each(t)}f(u,s)}function k(u){var v=parseFloat(u.Position.LongitudeDegrees);var t=parseFloat(u.Position.LatitudeDegrees);var s=new l.Point(t,v);s.elev=u.AltitudeMeters?parseFloat(u.AltitudeMeters):null;s.time=h(u.Time);s.heartrate=u.HeartRateBpm?parseFloat(u.HeartRateBpm.Value):null;return s}function c(v,w){function t(y){var x=k(y);v.addTrackpoint(x)}function u(x){v.newSegment();f(t,x.Trackpoint)}function s(x){f(u,x.Track);f(s,x.Activities);f(s,x.Activity);f(s,x.Lap);f(s,x.MultiSportSession);f(s,x.FirstSport);f(s,x.NextSport);f(s,x.Transition)}s(w)}function e(x){if(!x){return null}var u=/([-|+|\d]?\d*[\.[\d]+]?)[\s\t\n\r]*,[\s\t\n\r]*([-|+|\d]?\d*[\.[\d]+]?)([\s\t\n\r]*,[\s\t\n\r]*([-|+|\d]?\d*[\.[\d]+]?))?/;var t=u.exec(x);if(!t){return null}var w=parseFloat(t[1]);var v=parseFloat(t[2]);var s=new l.Point(v,w);if(t[4]){s.elev=parseFloat(t[4])}return s}function q(w,t,u){function s(A){w.newSegment();var C=/[\s\t\n\r]*,[\s\t\n\r]*/g;A.coordinates=A.coordinates.replace(C,",");C=/[\s\t\n\r]+/;var z=A.coordinates.split(C);for(var B=0;B<z.length;B++){if(z[B]){var y=e(z[B]);w.addTrackpoint(y)}}}function x(z){if(z.Point&&u.wpt){var y=e(z.Point.coordinates);y.name=z.name||null;y.html=z.description||null;w.addWaypoint(y)}if(u.trk){f(s,z.LineString)}}function v(y){f(x,y.Placemark);f(v,y.Folder)}v(t)}function d(t,s){s=s||this.options;t=t||{};for(var u in t){if(j(s[u])=="object"&&t[u]){Object.extend(s[u],t[u])}else{s[u]=t[u]}}}var l={};l.version="0.2";l.setI18N=function(s){i=s?(o[s]||Object.extend(i,s)):o.uk};l.Point=function(s,t){this.lat=s;this.lon=t;this.lng=t;this.elev=null;this.time=null;this.dist=0;this.dist3d=0;this.hour=null;this.vel=null;this.vel3d=null;this.heartrate=null;this.name=null;this.html=null};l.Point.prototype=new LatLonPoint();l.Data=function(){this.trackpoints=[];this.waypoints=[];this.routepoints=[];this.numOfSegments=0;this.numOfTrackpoints=0;this.numOfWaypoints=0;this.numOfRoutes=0;this.numOfRoutepoints=0;this.pointAt=function(A,z){var y=z=="rte"?this.routepoints:this.trackpoints;var x=0;while(A-y[x].length>=0){A-=y[x].length;x++}return y[x][A]};this.newSegment=function(){this.trackpoints.push([]);this.numOfSegments++};this.newRoute=function(){this.routepoints.push([]);this.numOfRoutes++;v=null};this.indexOf=function(B,z){var z=z||"dist";var x=0;var A=this.numOfTrackpoints-1;while(x<=A){var y=Math.floor((x+A)/2);if(this.pointAt(y)[z]===null){x++}else{if(this.pointAt(y)[z]>B){A=y-1}else{if(this.pointAt(y)[z]<B){x=y+1}else{return y}}}}return y};this.getBounds=function(E,C){var E=E||0;var C=C||this.numOfTrackPoints;var D=this.pointAt(E);var x=D.lat,z=x,y=D.lon,A=y;for(var B=E+1;B<=C;B++){D=this.pointAt(B);x=(D.lat<x)?D.lat:x;y=(D.lon<y)?D.lon:y;z=(D.lat>z)?D.lat:z;A=(D.lon>A)?D.lon:A}return(new BoundingBox(x,y,z,A))};function s(x,C){if(C){var D=x.distance(C);x.dist=C.dist+D;var E=D;if(x.elev!==null&&C.elev!==null){var A=(x.elev-C.elev)/1000;E=Math.sqrt(Math.pow(D,2)+Math.pow(A,2))}x.dist3d=C.dist3d+E;if(x.time!==null&&C.time!==null){var B=(x.time-C.time)/3600000;var z=0,y=0;if(B!==0){z=D/B;y=E/B}x.vel=x.vel||z;x.hour=C.hour+B;x.vel3d=y}}}function u(y,x){y.dist=x.dist;y.dist3d=x.dist3d;y.hour=x.hour;y.elev=x.elev;y.vel=x.vel;y.vel3d=x.vel3d;y.heartrate=x.heartrate}function t(x,C){var z=Number.MAX_VALUE;var A=null;for(var y=0;y<w.numOfTrackpoints;y++){var B=x.distance(w.pointAt(y));if(B<z){A=w.pointAt(y);z=B}}return(z<=C)?A:null}this.addTrackpoint=function(x){if(this.numOfSegments===0){this.newSegment()}s(x,v);this.trackpoints[this.numOfSegments-1].push(x);this.numOfTrackpoints++;v=x};this.addWaypoint=function(x){this.waypoints.push(x);this.numOfWaypoints++;v=x};this.addRoutepoint=function(x){if(this.numOfRoutes===0){this.newRoute()}s(x,v);this.routepoints[this.numOfRoutes-1].push(x);this.numOfRoutepoints++;v=x};this.adjustWayPointsToTrack=function(z){for(var x=0;x<this.numOfWaypoints;x++){var y=t(this.waypoints[x],z);if(y){u(this.waypoints[x],y)}else{this.waypoints[x].dist=null;this.waypoints[x].dist3d=null;this.waypoints[x].hour=null}}};this.adjustRoutePointsToTrack=function(A){for(var y=0;y<this.numOfRoutes;y++){for(var x=0;x<this.routepoints[y].length;x++){var z=t(this.routepoints[y][x],A);if(z){u(this.routepoints[y][x],z)}}}};var v=null;var w=this};l.Summary=function(t,s){this.data=t;this.options={filterRadius:2,stoppedDist:1/1000,stoppedVel:0.5,minSlope:0.05};this.setOptions=function(u){d(u,this.options)};this.reset=function(){this.totDist=0;this.totDist3d=0;this.minElev=null;this.maxElev=null;this.elevGain=null;this.elevLoss=null;this.minHeartrate=null;this.maxHeartrate=null;this.avgHeartrate=null;this.maxVel=null;this.avgVel=null;this.totTime=null;this.totTimeStop=null;this.totTimeUp=null;this.totTimeDown=null;this.totTimeFlat=null;this.totTimeMove=null};this.calculate=function(L,v){var z=this.options.source;var G=this.options.filterRadius;if((this.data.numOfTrackpoints<G)&&(z!="rte")){return}var D=new g(G);this.reset();var L=L||0;var v=(v===undefined?((z=="rte"?this.data.numOfRoutepoints:this.data.numOfTrackpoints)-1):v);var I=0,K=0,y=0,E=0;var x=this.data.pointAt(L,z);var u=x.elev;var M=0;if(z!="rte"){for(M=0;M<=G;M++){D.push(this.data.pointAt(L+M).elev)}}D.shift();for(M=L+1;M<=v;M++){var J=this.data.pointAt(M,z);var B=0,A=J.dist-x.dist;this.totDist+=A;this.totDist3d+=(J.dist3d-x.dist3d);var H=J.elev||0;if(J.elev!==null){if((M<v-G+1)&&(z!="rte")){D.push(this.data.pointAt(M+G).elev);H=D.shift()}if((this.maxElev===null)||(H>this.maxElev)){this.maxElev=H}if((this.minElev===null)||(H<this.minElev)){this.minElev=H}B=H-u;this.elevGain+=((B>0)?B:0);this.elevLoss+=((B<0)?B:0)}if(J.time!==null){this.totTime+=(J.hour-x.hour);var F=J.hour-x.hour;var w=(J.dist3d-x.dist3d<this.options.stoppedDist);w=w||(J.vel3d<this.options.stoppedVel);if(w){this.totTimeStop+=F}else{this.totTimeMove+=F;var C=Math.abs(B/A/1000);C/=(J.dist-x.dist);if(C<this.options.minSlope){B=0}if(B>0){this.totTimeUp+=F}else{if(B<0){this.totTimeDown+=F}else{this.totTimeFlat+=F}}if(J.vel!==null){I+=J.vel;K+=1;if((this.maxVel===null)||(J.vel>this.maxVel)){this.maxVel=J.vel}}}}if(J.heartrate!==null){y+=J.heartrate;E+=1;if((this.maxHeartrate===null)||(J.heartrate>this.maxHeartrate)){this.maxHeartrate=J.heartrate}if((this.minHeartrate===null)||(J.heartrate<this.minHeartrate)){this.minHeartrate=J.heartrate}}x=J;u=H}this.avgVel=K?I/K:null;this.avgHeartrate=E?y/E:null};this.options.source=((t.numOfTrackpoints==0)&&(t.numOfRoutepoints>0))?"rte":"trk";this.setOptions(s)};l.Parser=function(s,t){this.url=s;this.options={method:"post",trk:true,wpt:true,rte:true,adjustPoints:0.05};this.setOptions=function(w){d(w,this.options)};this.run=function(w){new Ajax.Request(this.url,{method:v.options.method,onSuccess:function(y){var z=new XML.ObjTree();var x=z.parseXML(y.responseText);if(x.parsererror){alert(x.parsererror["#text"])}else{if(x.gpx){if(v.options.trk&&x.gpx.trk){b(u,x.gpx.trk)}if(v.options.wpt&&x.gpx.wpt){p(u,x.gpx.wpt)}if(v.options.rte&&x.gpx.rte){n(u,x.gpx.rte)}}else{if(x.kml){q(u,x.kml.Document?x.kml.Document:x.kml,v.options)}else{if(x.TrainingCenterDatabase){if(v.options.trk){c(u,x.TrainingCenterDatabase)}}}}}if(v.options.adjustPoints&&v.options.trk){if(v.options.wpt){u.adjustWayPointsToTrack(v.options.adjustPoints)}if(v.options.rte){u.adjustRoutePointsToTrack(v.options.adjustPoints)}}if(w){document.observe("dom:loaded",w(u))}},onException:function(y,x){alert("Exception "+x.name+": "+x.message)}})};var v=this;var u=new l.Data();this.setOptions(t)};l.Map=function(w,v,u){this.map=w;this.gpsData=v;this.options={trk:{width:3,color:"#ff0000",opacity:1},rte:{width:3,color:"#00ff00",opacity:1},wpt:{},marker:{icon:"img/icon52.png",iconSize:[32,32],iconAnchor:[16,16],iconShadow:"img/void.png",iconShadowSize:[32,32]},join:true,info:true,chart:false,followMarker:true};this.setOptions=function(y){d(y,this.options)};this.draw=function(B){var F=Object.clone(this.options);Object.extend(F,B||{});var A=0,z=0;var E=[[]];var C=null;if(F.trk){if(F.join){for(A=0;A<this.gpsData.numOfSegments;A++){for(z=0;z<this.gpsData.trackpoints[A].length;z++){E[0].push(this.gpsData.trackpoints[A][z])}}}else{E=this.gpsData.trackpoints}for(A=0;A<E.length;A++){if(E[A].length){C=new Polyline(E[A]);this.map.addPolylineWithData(C,F.trk)}}}E=[[]];if(F.rte){if(F.join){for(A=0;A<this.gpsData.numOfRoutes;A++){for(z=0;z<this.gpsData.routepoints[A].length;z++){E[0].push(this.gpsData.routepoints[A][z])}}}else{E=this.gpsData.routepoints}for(A=0;A<E.length;A++){if(E[A].length){C=new Polyline(E[A]);this.map.addPolylineWithData(C,F.rte)}}}if(F.wpt){for(A=0;A<this.gpsData.numOfWaypoints;A++){var D=this.gpsData.waypoints[A];var y=new Marker(D);if(D.name){y.setLabel(D.name)}if(D.html){if(j(F.info)=="string"){y.setInfoDiv(D.html,F.info)}else{if(F.info){y.setInfoBubble(D.html)}}}this.map.addMarkerWithData(y,F.wpt)}this.map.autoCenterAndZoom()}};var x=this;var s;this.setOptions(u);var t=this.options.chart;if(t){t.container.observe("flotr:mousemove",function(A){var y=A.memo[1];var z=x.gpsData.indexOf(y.x,x.options.chart.options.x);if(s){x.map.removeMarker(s)}s=new Marker(x.gpsData.pointAt(z));x.map.addMarkerWithData(s,x.options.marker);if(x.options.followMarker){if(x.map.api=="google"){x.map.getMap().panTo(s.location.toGoogle())}else{x.map.setCenter(s.location)}}});t.container.observe("flotr:select",function(y){var B=y.memo[0];var A=v.indexOf(B.x1,x.options.chart.options.x);var z=v.indexOf(B.x2,x.options.chart.options.x);x.map.setBounds(v.getBounds(A,z))});t.container.observe("tools4gps:mapautozoom",function(){x.map.autoCenterAndZoom()})}this.draw();return this};l.Profile=function(D,t,s){this.container=$(D);this.gpsData=t;this.options={x:"dist",y:"elev",colors:["#4da74d","#00A8F0"],join:true,trackingEnabled:true,zoomEnabled:false,xDecs:null,yDecs:null,xFactor:null,yFactor:null,xUnit:false,yUnit:false,xaxis:{},yaxis:{},HtmlText:false,trk:true,wpt:true,rte:true,mouse:{track:true,lineColor:"purple",trackFormatter:G},selection:{mode:null}};this.setOptions=function(I,H){var J=H||this.options;d(I,J);J.xaxis.tickFormatter=J.xaxis.tickFormatter||function(K){return(z.options.x=="hour"?r(K):m(K))+" "+(z.options.xUnit||A[z.options.x])};J.yaxis.tickFormatter=J.yaxis.tickFormatter||function(K){return(z.options.y=="hour"?r(K):m(K))+" "+(z.options.yUnit||A[z.options.y])};J.xaxis.title=z.options.x=="hour"?i.xaxistitletime:i.xaxistitledist;J.yaxis.title=z.options.y=="elev"?i.yaxistitleelev:(z.options.y=="heartrate"?i.yaxistitleheartrate:i.yaxistitlevel);J.xDecs=J.xDecs||u[J.x];J.yDecs=J.yDecs||u[J.y];J.xFactor=J.xFactor||B[J.x];J.yFactor=J.yFactor||B[J.y];J.minDeltaX=J.minDeltaX||E[J.x];J.mouse.track=J.trackingEnabled;if(J.zoomEnabled){J.selection.mode="xy"}else{J.selection.mode=null;Object.extend(J.xaxis,{min:null,max:null});Object.extend(J.yaxis,{min:null,max:null});this.container.fire("tools4gps:mapautozoom")}};function G(H){return x[z.options.x]+" = "+(z.options.x=="hour"?r(H.x):m(H.x,z.options.xDecs))+" "+x[z.options.y]+" = "+(z.options.y=="hour"?r(H.y):m(H.y,z.options.yDecs))}function F(){Object.extend(z.options.xaxis,{min:null,max:null});Object.extend(z.options.yaxis,{min:null,max:null});z.draw();z.container.fire("tools4gps:mapautozoom")}function y(I){var K=z.options;var J=I.memo[0];var H=z.options.x;var L=z.options.y;Object.extend(K.xaxis,(J.x2-J.x1>C[H])?{min:J.x1,max:J.x2}:{min:(J.x1+J.x2-C[H])/2,max:(J.x1+J.x2+C[H])/2});Object.extend(K.yaxis,(J.y2-J.y1>C[L])?{min:J.y1,max:J.y2}:{min:(J.y1+J.y2-C[L])/2,max:(J.y1+J.y2+C[L])/2});z.draw()}function w(O,N,M){var H=O[0][0];var K=(N.x.substr(0,4)=="dist"?N.colors[0]:N.colors[1]);var I={data:[],color:K,lines:{show:true}};d(M,I);for(var L=0;L<O.length;L++){for(var J=0;J<O[L].length;J++){if((L+J===0)||(O[L][J][N.x]-H[N.x]>N.minDeltaX)){I.data.push([O[L][J][N.x]*N.xFactor,O[L][J][N.y]*N.yFactor]);H=O[L][J]}}if(!N.join){v.push(I);I=Object.clone(I);I.data=[]}}if(N.join){v.push(I)}}this.loadData=function(){var K=z.options;v=[];if(K.trk&&this.gpsData.numOfTrackpoints>0){w(this.gpsData.trackpoints,K,K.trk)}if(K.rte&&this.gpsData.numOfRoutes>0){w(this.gpsData.routepoints,K,K.rte)}if(K.wpt&&this.gpsData.numOfWaypoints){var H=(K.x.substr(0,4)=="dist"?K.colors[0]:K.colors[1]);var L={data:[],color:H,points:{show:true,fillColor:H}};d(K.wpt,L);var J=this.gpsData.waypoints;for(var I=0;I<J.length;I++){if(J[I][K.x]!==null){L.data.push([J[I][K.x]*K.xFactor,J[I][K.y]*K.yFactor])}}v.push(L)}};this.draw=function(H){var I=Object.clone(this.options);d(H,I);I.wpt=null;I.trk=null;I.rte=null;Flotr.draw(this.container,v,I)};var v=[];var A={dist:i.dist,dist3d:i.dist,hour:i.time,elev:i.elev,vel:i.vel,vel3d:i.vel,heartrate:i.heartrate};var x={dist:i.labeldist,dist3d:i.labeldist,hour:i.labeltime,elev:i.labelelev,vel:i.labelvel,vel3d:i.labelvel,heartrate:i.labelheartrate};var B={dist:i.distFactor,dist3d:i.distFactor,hour:i.timeFactor,elev:i.elevFactor,vel:i.velFactor,vel3dFactor:i.velFactor,heartrateFactor:i.heartrateFactor};var u={dist:i.distDecs,dist3d:i.distDecs,elev:i.elevDecs,vel:i.velDecs,vel3d:i.velDecs,heartrate:i.heartrateDecs};var E={dist:0.02,dist3d:0.02,hour:20/3600,elev:0,vel:0,vel3d:0,heartrate:0};var C={dist:0.1,dist3d:0.1,hour:0.1,elev:10,vel:1,vel3d:1,heartrate:1};var z=this;this.setOptions(s);this.container.observe("flotr:select",y);this.container.observe("dblclick",F);this.loadData();this.draw()};l.Report=function(s,v,u){this.container=$(s);this.options={decimals:{totDist:i.distDecs,totDist3d:i.distDecs,maxElev:i.elevDecs,minElev:i.elevDecs,elevGain:i.elevDecs,elevLoss:i.elevDecs,avgVel:i.velDecs,maxVel:i.velDecs,maxHeartrate:i.heartrateDecs,minHeartrate:i.heartrateDecs,avgHeartrate:i.heartrateDecs},factors:{totDist:i.distFactor,totDist3d:i.distFactor,maxElev:i.elevFactor,minElev:i.elevFactor,elevGain:i.elevFactor,elevLoss:i.elevFactor,avgVel:i.velFactor,maxVel:i.velFactor,maxHeartrate:i.heartrateFactor,minHeartrate:i.hearthrateFactor,avgHeartrate:i.heartrateFactor},chart:false};this.summary=new l.Summary(v,u);this.setOptions=function(x){d(x,this.options);this.summary.setOptions(x)};this.draw=function(E,D){var C=this.summary;var x=this.options.decimals;C.calculate(E,D);for(var A in C){var B=this.container.getElementsByClassName(A);for(var z=0;z<B.length;z++){var y=(this.options.factors[A]!==undefined)?C[A]*this.options.factors[A]:C[A];y=(A.substr(0,7)=="totTime")?r(y):m(y,x[A]);B[z].units=B[z].units||B[z].innerHTML;B[z].innerHTML=y+B[z].units}}};var w=this;this.setOptions(u);var t=this.options.chart;if(t){t.container.observe("flotr:select",function(x){var A=x.memo[0];var z=v.indexOf(A.x1,w.options.chart.options.x);var y=v.indexOf(A.x2,w.options.chart.options.x);w.draw(z,y)})}this.draw();return this};l.Planner=function(w,x,v){this.container=$(w);this.options={decimals:{lat:6,lon:6,lng:6,dist:i.distDecs,dist3d:i.distDecs,elev:i.elevDecs,vel:i.velDecs,vel3d:i.velDecs,heartrate:i.heartrateDecs,totDist:i.distDecs,totDist3d:i.distDecs,maxElev:i.elevDecs,minElev:i.elevDecs,elevGain:i.elevDecs,elevLoss:i.elevDecs,avgVel:i.velDecs,maxVel:i.velDecs,maxHeartrate:i.heartrateDecs,minHeartrate:i.heartrateDecs,avgHeartrate:i.heartrateDecs},factors:{dist:i.distFactor,dist3d:i.distFactor,hour:i.timeFactor,elev:i.elevFactor,vel:i.velFactor,vel3d:i.velFactor,totDist:i.distFactor,totDist3d:i.distFactor,maxElev:i.elevFactor,minElev:i.elevFactor,elevGain:i.elevFactor,elevLoss:i.elevFactor,avgVel:i.velFactor,maxVel:i.velFactor,maxHeartrate:i.heartrateFactor,minHeartrate:i.hearthrateFactor,avgHeartrate:i.heartrateFactor},source:"wpt",sourceRef:1,includeStart:true,includeEnd:true};this.setOptions=function(A){d(A,this.options)};this.loadData=function(){t=[];u=[];var A=this.options.sourceRef;var E=0,I=0,G=0,F=0;var C=this.options;function H(){if(Object.isArray(A)){F=A[E];E++}else{F+=A}}if(!C.includeStart||(C.includeStart&&A[0]==0)){H()}if(C.source.charAt(0).toUpperCase()=="R"){var D=0,J=Number.MAX_VALUE;for(I=0;I<x.numOfRoutes;I++){for(G=0;G<x.routepoints[I].length;G++){if(D==F){t.push(x.routepoints[I][G]);J=D;H()}D++}}if(C.includeEnd&&(J+1<x.numOfRoutepoints)){t.push(x.routepoints[x.numOfRoutepoints-1])}}else{if(C.source.charAt(0).toUpperCase()=="W"){var J=Number.MAX_VALUE;for(var I=0;I<x.numOfWaypoints;I++){if(I==F){t.push(x.waypoints[I]);J=I;H()}}if(C.includeEnd&&(J+1<x.numOfWaypoints)){t.push(x.waypoints[x.numOfWaypoints-1])}}else{for(I=0;I<x.numOfTrackpoints;I++){var B=x.pointAt(I);if(B.dist>=F){t.push(B);H()}}if(C.includeEnd){t.push(x.pointAt(x.numOfTrackpoints-1))}}}y()};function y(){var A="#totdist#totdist3d#minelev#maxelev#elevgain#elevloss#maxvel#avgvel#tottime#tottimestop#tottimeup#tottimedown#tottimeflat#totTimeMove#minheartrate#maxheartrate#avgheartrate#";var D=z.container.getElementsByTagName("th");var C=0;for(C=0;C<D.length;C++){if(A.search("#"+D[C].className.toLowerCase()+"#")>0){s=true;break}}if(s){var B=0;for(C=0;C<t.length;C++){u.push(new l.Summary(x,z.options));var E=u[C].options.source;var G=(E=="rte"?B:x.indexOf(t[B].dist,"dist"));var F=(E=="rte"?C:x.indexOf(t[C].dist,"dist"));u[C].calculate(G,F);B=C}}}this.draw=function(){var I=this.container;if(I.backup===undefined){I.backup=I.tBodies[0].cloneNode(true)}else{I.removeChild(I.tBodies[0]);I.appendChild(I.backup.cloneNode(true))}var J=I.getElementsByTagName("th");var L=I.tBodies[0];var F=[];var E=0;var N=document.createElement("tr");for(E=0;E<J.length;E++){F.push(J[E].className)}var B=this.options.decimals;var Q=I.tBodies[0].rows;var H=Q.length;var C=0;for(E=0;E<t.length;E++){var M=t[E];var P=(E<Q.length)?Q[E]:L.appendChild(N);var O=P.cells;for(var D=0;D<J.length;D++){if(O.length<J.length){P.insertCell(-1)}var K=F[D];var A=null;if(K=="num"){A=E+1}else{if(M[K]!==undefined){A=M[K]}else{if(s){var G=u[E];A=(G[K]!==undefined)?G[K]:null}}}J[D].units=(J[D].units===undefined)?O[D].innerHTML:J[D].units;O[D].innerHTML="";A=(this.options.factors[K]!==undefined)?A*this.options.factors[K]:A;if(A!==null){if(K=="hour"||K.substr(0,7)=="totTime"){A=r(A)}else{if((K=="time")&&(A.format!==undefined)){A=A.format(i.dateTimeFormat)}else{A=m(A,B[K])}}O[D].innerHTML=A+J[D].units}}if(E+1>=H){N=L.rows[C].cloneNode(true);C++}}};var z=this;var t=[];var u=[];var s=false;this.setOptions(v);this.loadData();this.draw();return this};l.Button=function(s,u){this.container=Element.extend(s);this.options={values:[""],onClick:function(){},tag:""};this.setOptions=function(y){var z=this.options;d(y,z);for(var x=0;x<z.values.length;x++){z["tag"+z.values[x]]=z["tag"+z.values[x]]||i["tagbutton"+this.container.className+z.values[x]]}};this.setOn=function(){w.container.src=w.container.src.replace(/_off(\..*)*/,"_on$1")};this.setOff=function(){if(w.options.values[v]!==true){w.container.src=w.container.src.replace(/_on(\..*)*/,"_off$1")}};this.getActiveValue=function(){return this.options.values[v]};this.getNextValue=function(){return this.options.values[t()]};this.draw=function(){this.container.title=this.options["tag"+this.options.values[0]];this.container.alt=this.container.title;this.container.observe("click",function(y){w.options.onClick(w);var z=w.getActiveValue(),x=w.getNextValue();if(w.options.values.length>1){if(j(z)=="boolean"){w["set"+(z?"Off":"On")]()}else{w.container.src=w.container.src.replace(z+"_",x+"_")}v=t()}w.container.title=w.options["tag"+x];w.container.alt=w.container.title})};var w=this;var v=0;var t=function(){return(v+1==w.options.values.length)?0:v+1};this.setOptions(u);this.container.observe("mouseover",this.setOn);this.container.observe("mouseout",this.setOff);this.draw();return this};l.ButtonBar=function(u,v){this.container=$(u);this.options={zoom:{values:[false,true],onClick:function(w){t.setOptions({zoomEnabled:!w.getActiveValue()});if(w.getActiveValue()&&s){s.draw()}t.draw()}},xaxis:{values:["dist","hour"],onClick:function(w){t.setOptions({x:w.getNextValue()});t.loadData();t.draw()}},yaxis:{values:["elev","vel"],onClick:function(w){t.setOptions({y:w.getNextValue()});t.loadData();t.draw()}},chart:null,report:null};this.setOptions=function(w){d(w,this.options)};this.draw=function(){var x=this.container.getElementsByTagName("img");for(var w=0;w<x.length;w++){var y=x[w].className;if(this.options[y]){if(this.options[y] instanceof l.Button){this.options[y].draw()}else{this.options[y]=new l.Button(x[w],this.options[y])}}}};this.setOptions(v);var t=this.options.chart,s=this.options.report;this.draw();return this};return l}();
