function mbdRequest(){this.name=null;this.guid=null;this.type=null;this.referenceId=null;this.arrayPositionsRef=null;this.idRequest=0;this.callback=null;this.isRunning=false;this.startTime=null;this.arrayPositions=[];this.lastPosition=null;this.chrono=new Chrono(displayChrono);this.timer=new Timer;this.timerSave=new Timer;this.gMockGps=null;this.distance=0;this.maxSpeed=null;this.minSpeed=null;this.averageSpeed=0;this.posDenivellation=0;this.negDenivellation=0;this.maxAltitude=null;this.minAltitude=null;this.denivTemp=0;this.savedToWeb=false;var a=this;this.setName=function(a){this.name=a};this.getName=function(){return this.name};this.setType=function(a){this.type=a};this.getType=function(){return this.type};this.setReferenceId=function(a){this.referenceId=a;if(a==null)this.arrayPositionsRef=null};this.getReferenceId=function(){return this.referenceId};this.setArrayRefPositions=function(b){a.arrayPositionsRef=b};this.initialize=function(a){this.guid=createGuid();this.callback=a;this.timer.Init(3);this.timerSave.Init(6);if(gpsSource!="mock")this.startGeolocation();else{this.gMockGps=new MockGps(1);this.gMockGps.startGeolocationMock(this.processPosition)}};this.start=function(){if(this.type!=20){this.chrono.start();gpsSource=="mock"&&setTimeout("stopMockSport();",3e5)}this.isRunning=true};this.stop=function(){this.chrono.stop();if(gpsSource!="mock"){this.stopGeolocation();this.isRunning=false}else{this.gMockGps.stopGeolocationMock();this.isRunning=false}};this.setSaveToWeb=function(a){this.savedToWeb=a};this.setLastWpt=function(){for(var a=this.arrayPositions.length-1;a>-1;a--)if(this.arrayPositions[a].toSave){this.arrayPositions[a].isWaypoint=true;!this.arrayPositions[a].marker&&addWptMarker(this.arrayPositions[a]);break}};this.startGeolocation=function(){if(!global.geo)throw geolocationNotSupportedError;global.currentGeoWatcher=global.geo.watchPosition(this.processPosition,this.handleError,{enableHighAccuracy:true,maximumAge:0})};this.processPosition=function(b){if(b.coords.accuracy>50)return;if(a.timer.TimerRunning==false&&a.isRunning){if(a.type!=20){!a.lastPosition&&a.setStartTime(new Date);a.lastPosition=b;a.updateStats();if(a.timerSave.TimerRunning==false&&a.isRunning){b.toSave=true;a.timerSave.StartTimer()}a.arrayPositions.push(b)}a.timer.StartTimer();a.callback(b)}else!a.isRunning&&a.callback(b)};this.handleError=function(a){a.code!=2&&alert("Location failed : "+a.code+" - "+a.message)};this.stopGeolocation=function(){global.geo.clearWatch(global.currentGeoWatcher);global.currentGeoWatcher=null};this.updateStats=function(){this.updateDistance();this.updateMaxSpeed();this.updateMinSpeed();this.updateAverageSpeed();this.updateDenivellation();this.updateMaxAltitude();this.updateMinAltitude()};this.updateDistance=function(){if(this.arrayPositions.length>0)this.distance+=Math.round(getTwoPointsDistanceStu(this.arrayPositions[this.arrayPositions.length-1],this.lastPosition))};this.updateMaxSpeed=function(){if(!this.maxSpeed)this.maxSpeed=this.lastPosition.coords.speed;if(this.lastPosition.coords.speed>this.maxSpeed)this.maxSpeed=this.lastPosition.coords.speed};this.updateMinSpeed=function(){if(!this.minSpeed)this.minSpeed=this.lastPosition.coords.speed;if(this.lastPosition.coords.speed<this.minSpeed)this.minSpeed=this.lastPosition.coords.speed};this.updateAverageSpeed=function(){var b=this.getDistance()/1e3,a=this.chrono.getTotalSecondes()/3600;this.averageSpeed=b/a};this.updateDenivellation=function(){if(this.arrayPositions.length>1){this.denivTemp+=this.lastPosition.coords.altitude-this.arrayPositions[this.arrayPositions.length-1].coords.altitude;if(Math.abs(this.denivTemp)>10){if(this.denivTemp>0)this.posDenivellation+=this.denivTemp;else if(this.denivTemp<0)this.negDenivellation+=this.denivTemp;this.denivTemp=0}}};this.updateMaxAltitude=function(){if(!this.maxAltitude)this.maxAltitude=Math.round(this.lastPosition.coords.altitude);if(this.lastPosition.coords.altitude>this.maxAltitude)this.maxAltitude=Math.round(this.lastPosition.coords.altitude)};this.updateMinAltitude=function(){if(!this.minAltitude)this.minAltitude=this.lastPosition.coords.altitude;if(this.lastPosition.coords.altitude<this.minAltitude)this.minAltitude=this.lastPosition.coords.altitude};this.getDistance=function(){return this.distance};this.getAverageSpeedStu=function(){return!isNaN(this.averageSpeed)?Math.round(this.averageSpeed):0};this.getMaxSpeed=function(){return this.maxSpeed};this.getMinSpeed=function(){return this.minSpeed};this.getPosDenivellation=function(){return Math.round(this.posDenivellation)};this.getNegDenivellation=function(){return Math.round(this.negDenivellation)};this.getMaxAltitude=function(){return Math.round(this.maxAltitude)};this.getMinAltitude=function(){return Math.round(this.minAltitude)};this.setStartTime=function(a){this.startTime=a};this.getStartTime=function(){return this.startTime}}
