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=new GIcon();transferIcon.image='transfer.png';transferIcon.iconSize=new GSize(11,11);transferIcon.iconAnchor=new GPoint(5,5);transferIcon.infoWindowAnchor=new GPoint(3,7);var stationIcons;var width=5;function Setup()
{try
{if(!GBrowserIsCompatible())
{mapDiv.innerHTML='Sorry, your browser is not compatible with Google Maps.';return;}
MySetLanguage(LANG_FRENCH);}
catch(e)
{GLog.write('Setup:\n'+Props(e));}}
var myCurrentLanguage=LANG_UNKNOWN;function MySetLanguage(language)
{if(language!=myCurrentLanguage)
{switch(language)
{case LANG_ENGLISH:headerDiv.innerHTML='Metro Map';routingCaptionDiv.innerHTML='Routing';break;case 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();}
SetLanguage(language);instructionsDiv.innerHTML=''+_mInstructions+'';CreateMap(lat,lng,zoom);}}
function CreateMap(lat,lng,zoom)
{om=new OverlayMessage(mapDiv);mapDiv.innerHTML='';map=new GMap2(mapDiv,{draggableCursor:'default'});map.addControl(new GLargeMapControl());map.addControl(new GMapTypeControl());map.addControl(new GScaleControl());map.setCenter(new GLatLng(lat,lng),zoom);GEvent.addListener(map,'infowindowclose',PopDown);GEvent.addListener(map,'click',MapClick);RoutingCheckboxChanged();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 GLatLng(lat,lng);var xfer=lNms.length>1?true:false;var marker=new GMarker(point,{icon:xfer?transferIcon:stationIcons[lNms[0]],title:title});marker.id=id;marker.name=name;marker.lNms=lNms;map.addOverlay(marker);stations.push(marker);GEvent.addListener(marker,'click',MakeCaller(PopUp,i));idLookup[id]=i;stationsSelect[i]=new Option(name,i);}
lines=[];for(var i=0;i0)
{var polyline=new GPolyline(points,line.color,width,1.0);map.addOverlay(polyline);}
lines[number]=line;}
om.Clear();}
catch(e)
{GLog.write('RequestChecker:\n'+Props(e));}}
function StationsSelectChanged()
{try
{station=stationsSelect[stationsSelect.selectedIndex].value;PopUp(station);}
catch(e)
{GLog.write('StationsSelectChanged:\n'+Props(e));}}
function RoutingCheckboxChanged()
{try
{routing=routingCheckbox.checked;RePop();}
catch(e)
{GLog.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)
{GLog.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 LANG_ENGLISH:html+='Route from '+stations[idLookup[from]].name+' to here:
';break;case 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 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)
{GLog.write('MapClick:\n'+Props(e));}}