+ abbreviations are OK):<br/>
+
+<script type="text/javascript">
+textRoute_uri= "routetextstring?format=json"
+ + "&ocean=<% uri_escape($a{Ocean}) %>";
+
+textRoute_timeout=false;
+textRoute_request=false;
+textRoute_done='';
+textRoute_needed='';
+function textRoute_Later(){
+ window.clearTimeout(textRoute_timeout);
+ textRoute_timeout = window.setTimeout(textRoute_Needed, 500);
+}
+function textRoute_Needed(){
+ window.clearTimeout(textRoute_timeout);
+ //textRoute_element= document.getElementsByName('routestring').item(0);
+ //alert(textRoute_element.name);
+ textRoute_needed= textRoute_element.value;
+ textRoute_Request();
+}
+function textRoute_Request(){
+ if (textRoute_request || textRoute_needed==textRoute_done) return;
+ textRoute_done= textRoute_needed;
+ textRoute_request= new XMLHttpRequest();
+ uri= textRoute_uri+'&string='+encodeURIComponent(textRoute_needed);
+ textRoute_request.open('GET', uri);
+ textRoute_request.onreadystatechange= textRoute_Ready;
+ textRoute_request.send(null);
+}
+function textRoute_Ready() {
+ if (textRoute_request.readyState != 4) return;
+ if (textRoute_request.status == 200) {
+ response= textRoute_request.responseText;
+ //alert('got [[ '+response+' ]]');
+ eval('results='+response);
+ toedit= document.getElementsByName('routeresults').item(0);
+ toedit.innerHTML= results['show'];
+ }
+ textRoute_request= false;
+ textRoute_Request();
+}
+</script>
+
+<input type="text" name="routestring" size=80
+ onchange="textRoute_element= event.currentTarget; textRoute_Needed();"
+ onkeydown="textRoute_element= event.currentTarget; textRoute_Later();"><br>
+<div name="routeresults"></div><br/>
+