google.load("maps","2",{other_params:"sensor=false"});google.setOnLoadCallback(Setup);var headerDiv=document.getElementById('header');var mapDiv=document.getElementById('map');var routingCaptionDiv=document.getElementById('routingCaption');var instructionsDiv=document.getElementById('instructions');var coordsDiv=document.getElementById('coords');var stationsSelect=document.getElementById('stations');var routingCheckbox=document.getElementById('routing');var om=null;var map=null;var request=null;var lines,stations;var routing;var idLookup;var routeLine=null;var transferIcon;var stationIcons;var width=5;function Setup() {try {acme.Initialize();acme.maps.Initialize();if(!google.maps.BrowserIsCompatible()) {mapDiv.innerHTML='Sorry, your browser is not compatible with Google Maps.';return;} MySetLanguage(acme.maps.LANG_FRENCH);} catch(e) {google.maps.Log.write('Setup:\n'+Props(e));}} var myCurrentLanguage=acme.maps.LANG_UNKNOWN;function MySetLanguage(language) {if(language!=myCurrentLanguage) {switch(language) {case acme.maps.LANG_ENGLISH:headerDiv.innerHTML='Metro Map';routingCaptionDiv.innerHTML='Routing';break;case acme.maps.LANG_FRENCH:headerDiv.innerHTML='Plan Métro';routingCaptionDiv.innerHTML='Itinéraire';break;} myCurrentLanguage=language;var lng,lat,zoom;if(map==null) {lat=48.861;lng=2.335;zoom=12;} else {var p=map.getCenter();lat=p.lat();lng=p.lng();zoom=map.getZoom();} acme.maps.SetLanguage(language);instructionsDiv.innerHTML=''+acme.maps._mInstructions+'';CreateMap(lat,lng,zoom);}} function CreateMap(lat,lng,zoom) {om=new OverlayMessage(mapDiv);mapDiv.innerHTML='';map=new google.maps.Map2(mapDiv,{draggableCursor:'default'});map.addControl(new google.maps.LargeMapControl());map.addControl(new google.maps.MapTypeControl());map.addControl(new google.maps.ScaleControl());map.setCenter(new google.maps.LatLng(lat,lng),zoom);google.maps.Event.addListener(map,'infowindowclose',PopDown);google.maps.Event.addListener(map,'click',MapClick);RoutingCheckboxChanged();transferIcon=new google.maps.Icon();transferIcon.image='transfer.png';transferIcon.iconSize=new google.maps.Size(11,11);transferIcon.iconAnchor=new google.maps.Point(5,5);transferIcon.infoWindowAnchor=new google.maps.Point(3,7);om.Set('Loading...');if(request!=null) RequestChecker(request);else HttpGet('data.xml',RequestChecker);} function RequestChecker(_request) {try {request=_request;var xmlDoc=request.responseXML.documentElement;var lineElements=xmlDoc.getElementsByTagName('line');var stationElements=xmlDoc.getElementsByTagName('station');stationIcons=[];for(var i=0;i0) title+=', ';title+=nm;} title+=')';var point=new google.maps.LatLng(lat,lng);var xfer=lNms.length>1?true:false;var marker=new google.maps.Marker(point,{icon:xfer?transferIcon:stationIcons[lNms[0]],title:title});marker.id=id;marker.name=name;marker.lNms=lNms;map.addOverlay(marker);stations.push(marker);google.maps.Event.addListener(marker,'click',MakeCaller(PopUp,i));idLookup[id]=i;stationsSelect[i]=new Option(name,i);} lines=[];for(var i=0;i0) {var polyline=new google.maps.Polyline(points,line.color,width,1.0);map.addOverlay(polyline);} lines[number]=line;} om.Clear();} catch(e) {google.maps.Log.write('RequestChecker:\n'+Props(e));}} function StationsSelectChanged() {try {station=stationsSelect[stationsSelect.selectedIndex].value;PopUp(station);} catch(e) {google.maps.Log.write('StationsSelectChanged:\n'+Props(e));}} function RoutingCheckboxChanged() {try {routing=routingCheckbox.checked;RePop();} catch(e) {google.maps.Log.write('RoutingCheckboxChanged:\n'+Props(e));}} var currPop=-1;var prevPop=-1;var prevPrevPop=-1;function PopUp(i) {try {var html=StationHtml(i);if(routing&&prevPop!=-1&&prevPop!=i) HttpGet('get_route.cgi?id1='+stations[prevPop].id+'&id2='+stations[i].id,RouteRequestChecker);map.closeInfoWindow();stations[i].openInfoWindowHtml(html,{maxWidth:300});prevPrevPop=prevPop;prevPop=currPop=i;} catch(e) {google.maps.Log.write('PopUp:\n'+Props(e));}} function RouteRequestChecker(routeRequest) {try {if(currPop!=-1) {var thisPop=currPop;var routeLinePoints=[];ClearRouteLine();var xmlDoc=routeRequest.responseXML.documentElement;var from=xmlDoc.getAttribute('from');var to=xmlDoc.getAttribute('to');var html=StationHtml(thisPop);html+='
';switch(myCurrentLanguage) {case acme.maps.LANG_ENGLISH:html+='Route from '+stations[idLookup[from]].name+' to here:
';break;case acme.maps.LANG_FRENCH:html+='Itinéraire de '+stations[idLookup[from]].name+' à ici:
';break;} var errorElements=xmlDoc.getElementsByTagName('error');if(errorElements.length!=0) {for(var i=0;i';}} else {routeLinePoints.push(stations[idLookup[from]].getPoint());var segmentElements=xmlDoc.getElementsByTagName('segment');for(var i=0;i direction '+stations[idLookup[dir]].name+' to '+stations[idLookup[dest]].name+'
';break;case acme.maps.LANG_FRENCH:html+=' direction '+stations[idLookup[dir]].name+' jusqu\'à '+stations[idLookup[dest]].name+'
';break;} var gotFrom=false;for(var j=0;j
';for(var j=0;j';html+='
';return html;} function RePop() {if(currPop!=-1) {prevPop=prevPrevPop;PopUp(currPop);}} function PopDown() {ClearRouteLine();currPop=-1;} function ClearRouteLine() {if(routeLine!=null) {map.removeOverlay(routeLine);routeLine=null;}} function MapClick(overlay,point) {try {if(overlay==null&&point!=null) coordsDiv.innerHTML=point.y.toFixed(4)+', '+point.x.toFixed(4);} catch(e) {google.maps.Log.write('MapClick:\n'+Props(e));}}