- // Add engines
-
- r.engines=[];
- r.addEngine=function(engine) {
- // Save engine
- var i=r.engines.length;
- engine.subscript=i;
- r['engine'+i]=engine;
- r.engines.push(engine);
-
- // Add generic JSONP function
- engine.requestJSONP=function(url) {
- var script = document.createElement('script');
- script.src = url+"&jsonp="+r.name+".engine"+this.subscript+".gotRoute";
- // OSRM doesn't like non-alphanumeric, otherwise we could just do OSM.routing.engines["+engine.subscript+"].gotRoute
- document.body.appendChild(script);
- };
-
- // Populate dropdown
- var select=jqSearch.find('select.routing_engines');
- select.append("<option value='"+i+"'>"+engine.name+"</option>");
+ // Routing engine handling
+
+ // Add all engines
+ var list=OSM.RoutingEngines.list;
+ list.sort(function(a,b) { return a.name>b.name; });
+ var select=r.jqSearch.find('select.routing_engines');
+ for (var i=0; i<list.length; i++) {
+ // Set up JSONP callback
+ with ({num: i}) {
+ list[num].requestJSONP=function(url) {
+ var script = document.createElement('script');
+ script.src = url+r.name+".gotRoute"+num;
+ document.body.appendChild(script);
+ };
+ r['gotRoute'+num]=function(data) { list[num].gotRoute(r,data); };
+ }
+ select.append("<option value='"+i+"'>"+list[i].name+"</option>");
+ }
+ r.engines=list;
+ r.chosenEngine=list[0]; // default to first engine
+
+ // Choose an engine on dropdown change
+ r.selectEngine=function(e) {
+ r.chosenEngine=r.engines[e.target.selectedIndex];