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(wy&&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+="
"+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=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]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;ythis.maxElev)){this.maxElev=H}if((this.minElev===null)||(H0)?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.dist3d0){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.heartrate0))?"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;AC[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;LN.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=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;C0){s=true;break}}if(s){var B=0;for(C=0;C=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;x1){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