How to stop running srcipt

Hi,

i have some javascript hier and i need a stop button. Im more into jQuery and don’t know how to do it in plain javascript.

This lets it running:

function start() {
   var startpoint = document.getElementById("fromAddress").value;
   var endpoint = document.getElementById("toAddress").value;
   dirn.loadFromWaypoints([startpoint, endpoint], {
      getPolyline: true,
      getSteps: true
   });
<a class="button-more left-col-bottom" href="javascript:start();">Go!</a>

What you can do in your object dirn declare variable for example dirn.Enabled = true;
and in your loop check each time if dirn.Enabled == true continue with execution otherwise stop it.

Example
while(dirn.Enabled)
{
//code
}

I hope this helps

Sorry i’m really not into javascript.
Here is the whole thing:


function initialize() {
   if (GBrowserIsCompatible()) {
      map = new GMap2(document.getElementById("map_canvas"));
      gdir = new GDirections(map, document.getElementById("directions"));
      GEvent.addListener(gdir, "load", onGDirectionsLoad);
      GEvent.addListener(gdir, "error", handleErrors);
   }
}

function updatePoly(d) {
   // Spawn a new polyline every 20 vertices, because updating a 100-vertex poly is too slow
   if (poly2.getVertexCount() > 20) {
      poly2 = new GPolyline([poly.getVertex(lastVertex - 1)]);
      map.addOverlay(poly2)
   }

   if (poly.GetIndexAtDistance(d) < lastVertex + 2) {
      if (poly2.getVertexCount() > 1) {
         poly2.deleteVertex(poly2.getVertexCount() - 1)
      }
      poly2.insertVertex(poly2.getVertexCount(), poly.GetPointAtDistance(d));
   } else {
      poly2.insertVertex(poly2.getVertexCount(), poly.getVertex(lastVertex++));
   }
}

function animate(d) {
   if (d > eol) {
      document.getElementById("step").innerHTML = "<b>Trip completed<\\/b>";
      document.getElementById("distance").innerHTML = "Miles: " + (d / 1609.344).toFixed(2);
      return;
   }
   var p = poly.GetPointAtDistance(d);
   if (k++ >= 180 / step) {
      map.panTo(p);
      k = 0;
   }
   marker.setPoint(p);
   document.getElementById("distance").innerHTML = "Miles: " + (d / 1609.344).toFixed(2) + speed;
   if (stepnum + 1 < dirn.getRoute(0).getNumSteps()) {
      if (dirn.getRoute(0).getStep(stepnum).getPolylineIndex() < poly.GetIndexAtDistance(d)) {
         stepnum++;
         var steptext = dirn.getRoute(0).getStep(stepnum).getDescriptionHtml();
         document.getElementById("step").innerHTML = "<b>Next:<\\/b> " + steptext;
         var stepdist = dirn.getRoute(0).getStep(stepnum - 1).getDistance().meters;
         var steptime = dirn.getRoute(0).getStep(stepnum - 1).getDuration().seconds;
         var stepspeed = ((stepdist / steptime) * 2.24).toFixed(0);
         step = stepspeed / 2.5;
         speed = "<br>Current speed: " + stepspeed + " mph";
      }
   } else {
      if (dirn.getRoute(0).getStep(stepnum).getPolylineIndex() < poly.GetIndexAtDistance(d)) {
         document.getElementById("step").innerHTML = "<b>Next: Arrive at your destination<\\/b>";
      }
   }
   updatePoly(d);
   setTimeout("animate(" + (d + step) + ")", tick);
}

GEvent.addListener(dirn, "load", function () {
   poly = dirn.getPolyline();
   eol = poly.Distance();
   map.setCenter(poly.getVertex(0), 16);
   map.addOverlay(new GMarker(poly.getVertex(0), G_START_ICON));
   map.addOverlay(new GMarker(poly.getVertex(poly.getVertexCount() - 1), G_END_ICON));
   marker = new GMarker(poly.getVertex(0), {
      icon: car
   });
   map.addOverlay(marker);
   var steptext = dirn.getRoute(0).getStep(stepnum).getDescriptionHtml();
   document.getElementById("step").innerHTML = steptext;
   poly2 = new GPolyline([poly.getVertex(0)]);
   map.addOverlay(poly2);
   setTimeout("animate(0)", 2000); // Allow time for the initial map display
});

GEvent.addListener(dirn, "error", function () {
   alert("Location(s) not recognised. Code: " + dirn.getStatus().code);
});

function start() {
   var startpoint = document.getElementById("fromAddress").value;
   var endpoint = document.getElementById("toAddress").value;
   dirn.loadFromWaypoints([startpoint, endpoint], {
      getPolyline: true,
      getSteps: true
   });

}