
var radius=1;var radiusMax=25;var radiusFractions=0.1;var radiusQuality=20;var routeTolerance=0.5;var autoCentre=false;var showAllMarkers=false;var radiusRefresh=(markers.length<=300);var mapstraction;var homeMarker;var workMarker;var homeRadius;var workRadius;var autoRoute;var autoRouteRadius;var customRoute;var customRouteRadius;var radiusRatio;var mapHandler;var customHandler;var startHandler;var mode;if(!GBrowserIsCompatible()){alert("evince has detected that your browser is incompatible with the mapping system.\nIf you are using Internet Explorer, please clear your cache and try again.\nAlternatively try using a newer version of your browser.");history.back();}
window.onunload=GUnload;$(function(){startLoading("Initialising Map");disableButtons();resizeMap();mapstraction=new Mapstraction('mapstraction','google');mapstraction.enableScrollWheelZoom();var centrePoint=new LatLonPoint(54,-3);mapstraction.setCenterAndZoom(centrePoint,7);mapstraction.addControls({pan:true,zoom:'large',overview:false,scale:true,map_type:false});addFunctions();loadMarkers();});function startLoading(message){if(!message)message="Working";document.getElementById('progressText').innerHTML=message+"...";$("#progressBar").reportProgress(0);$("#progressPopup").show();}
function endLoading(){$("#progressPopup").fadeOut("slow");}
function disableButtons(button){if(!button){buttonState("auto",true);buttonState("custom",true);buttonState("home",true);buttonState("work",true);buttonState("both",true);buttonState("none",true);buttonState("bounds",true);buttonState("autoCentre",true);buttonState("detail",true);buttonState("allmarkers",true);buttonState("balloons",true);buttonState("setHome",true);buttonState("setWork",true);buttonState("ctl00_MainContent_submit",true);buttonState("ctl00_MainContent_cancel",true);return;}
buttonState("none");buttonState("bounds");buttonState("detail");buttonState("balloons");buttonState("ctl00_MainContent_cancel");if(mode!="none"){buttonState("autoCentre");buttonState("allmarkers");buttonState("ctl00_MainContent_submit");}
if(homeMarker&&workMarker){buttonState("auto");buttonState("custom");buttonState("both");}
if(homeMarker)buttonState("home");else buttonState("setHome");if(workMarker)buttonState("work");else buttonState("setWork");buttonState(button,true);}
function buttonState(name,disable){button=document.getElementById(name);if(button){button.disabled=disable;oldClass=(disable)?name:name+"Off";newClass=(disable)?name+"Off":name;$(button).removeClass(oldClass);$(button).addClass(newClass);}}
function addFunctions(){startLoading("Initialising Functions");$(window).resize(function(){resizeMap();});mapstraction.addMapListener("zoomend",function(){if(mode=="auto"||mode=="custom"){updateRatio();updateMap();}});$("#slider").slider({animate:true,min:0,max:radiusMax/radiusFractions,startValue:radius/radiusFractions,slide:function(e,ui){updateRadius(ui.value*radiusFractions);if(!radiusRefresh){updateMap();if(autoCentre)updateView();}}});$('button#sliderLeft').mousehold(function(){if(radiusRefresh)$("#slider").slider("moveTo",(radius-0.1)/radiusFractions);else updateRadius(radius-0.1);});$('button#sliderRight').mousehold(function(){if(radiusRefresh)$("#slider").slider("moveTo",(radius+0.1)/radiusFractions);else updateRadius(radius+0.1);});$('button#sliderLeft, button#sliderRight').click(function(){if(!radiusRefresh)$("#slider").slider("moveTo",radius/radiusFractions);return false;});$('#slider-info').keypress(function(e){if(e.keyCode==8||e.keyCode==46)return true;var key=e.charCode?e.charCode:e.keyCode?e.keyCode:0;if(key==13){var newRadius=document.getElementById('slider-info').value;$("#slider").slider("moveTo",newRadius/radiusFractions);if(!radiusRefresh)updateAll();return false;}
if(key==37||key==39)return true;var selected=window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection?document.selection.createRange().text:"";if(selected==""&&document.getElementById('slider-info').value.length>3)return false;if(e.charCode==46)return(this.value.indexOf('.')==-1);if(key<48||key>57)return false;});$(".controlsTab").click(function(){$("#controls").toggle("medium");});$("button.mode").click(function(){changeMode($(this).attr("id"));return false;});$("button#bounds").click(function(){updateView();return false;});$("button#autoCentre").click(function(){autoCentre=!autoCentre;if(autoCentre)updateView();return false;});$("button#detail").click(function(){var container=document.getElementById("mappingContainer");var hide=(container.className=="sidebar-on");container.className=(hide)?"sidebar-off":"sidebar-on";resizeMap((hide)?0:200);return false;});$("button#allmarkers").click(function(){showAllMarkers=!showAllMarkers;changeMode(mode);return false;});$("button#balloons").click(function(){for(var i=0;i<mapstraction.markers.length;i++){if(mapstraction.markers[i]!=homeMarker&&mapstraction.markers[i]!=workMarker){mapstraction.markers[i].proprietary_marker.openInfoWindowHtml("s");}}
return false;});$("button#setHome").click(function(){setMarker('home');return false;});$("button#setWork").click(function(){setMarker('work');return false;});$("#ctl00_MainContent_submit").click(function(){var selectedIDs="";var selectedTypes="";var selectedDistances="";for(var i=0;i<mapstraction.markers.length;i++){if(mapstraction.markers[i]!=homeMarker&&mapstraction.markers[i]!=workMarker){if(mapstraction.markers[i].getAttribute("visible")){selectedIDs+=","+mapstraction.markers[i].getAttribute("id");selectedTypes+=","+mapstraction.markers[i].getAttribute("type");selectedDistances+=","+mapstraction.markers[i].getAttribute(mode).toFixed(2);}}}
document.getElementById("selectedIDs").value=selectedIDs.substring(1);document.getElementById("selectedTypes").value=selectedTypes.substring(1);document.getElementById("selectedDistances").value=selectedDistances.substring(1);});}
function loadMarkers(){startLoading("Loading Markers");var point;var marker;$.startProgress("#progressBar",0,markers.length,function(i){point=new LatLonPoint(markers[i].latitude,markers[i].longitude);if(markers[i].type=="home"||markers[i].type=="work")marker=addMarker(point,null,true,eval(markers[i].type+"Icon"));else marker=addMarker(point,markers[i].name,false,eval(markers[i].type+"Icon"));marker.setAttribute('id',markers[i].id);marker.setAttribute('type',markers[i].type);marker.setAttribute('name',markers[i].name);if(markers[i].type=="home"){homeMarker=marker;addListeners(homeMarker);}
else if(markers[i].type=="work"){workMarker=marker;addListeners(workMarker);}
else{marker.setAttribute('custom',999);addListener(marker,markers[i].id);}},function(i){markers=null;var markerCount=mapstraction.markers.length;if(homeMarker)markerCount--;if(workMarker)markerCount--;document.getElementById('results-info').innerHTML=markerCount;document.getElementById('slider-info').value=radius.toFixed(1);chooseMode();});}
function addMarker(point,information,draggable,iconUrl,iconSize,iconAnchor,shadowUrl,shadowSize){var marker=new Marker(point);if(information)marker.setInfoBubble(information);if(draggable)marker.addData({draggable:true});if(!iconUrl)iconUrl=eval("defaultIcon");if(!iconSize)iconSize=[32,32];if(!iconAnchor)iconAnchor=[16,32];if(!shadowUrl)shadowUrl=eval("shadowIcon");if(!shadowSize)shadowSize=[59,32];marker.setIcon(iconUrl,iconSize,iconAnchor);marker.setShadowIcon(shadowUrl,shadowSize);mapstraction.addMarker(marker);return marker;}
function setMarker(name){if((name=="home"&&!homeMarker)||(name=="work"&&!workMarker)){if(confirm('Click on the map where you would like to place the '+name+' marker.\nThe home and work markers can be dragged to a new location once plotted.')){clearMap();mapHandler=mapstraction.addMapListener("click",function(overlay,point){if(point){if(mapHandler){mapstraction.removeMapListener(mapHandler);mapHandler=null;}
var markerPoint=new LatLonPoint();markerPoint.fromGoogle(point);var marker=addMarker(markerPoint,null,true,eval(name+"Icon"));marker.setAttribute('type',name);marker.setAttribute('name',name);if(name=="home")homeMarker=marker;else if(name=="work")workMarker=marker;addListeners(marker);chooseMode();}});}}}
function addListeners(marker){marker.addListener("dragstart",function(){if(mode!="custom"||!customHandler)clearMap();autoRoute=autoRouteRadius=customRouteRadius=null;if(marker==homeMarker)homeRadius=null;if(marker==workMarker)workRadius=null;});marker.addListener("dragend",function(){marker.update();if(customRoute){if(marker==homeMarker)customRoute.points[0]=homeMarker.location;if((mode!="custom"||!customHandler)&&marker==workMarker)customRoute.points[customRoute.points.length-1]=workMarker.location;}
if(customHandler&&marker==homeMarker)redrawCustomRoute();else if(!customHandler)changeMode(mode);});}
function addListener(marker,id){var focusPoint=function(caller){var sidebar=document.getElementById("sidebar");var detail=document.getElementById("pointTitle"+id);marker.openBubble();if(detail.offsetTop<sidebar.scrollTop||detail.offsetTop>(sidebar.scrollTop+$(window).height()))sidebar.scrollTop=detail.offsetTop;$(".markerTitle").removeClass("selectedTitle");$(".marker").removeClass("selectedMarker");$("#pointTitle"+id).addClass("selectedTitle");$("#point"+id).addClass("selectedMarker").show("medium");}
$("#pointTitle"+id).toggle(focusPoint,function(){$(this).next().hide("medium");});marker.addListener("click",focusPoint);}
function chooseMode(){if(homeMarker&&workMarker)changeMode("both");else if(homeMarker)changeMode("home");else if(workMarker)changeMode("work");else changeMode("none");}
function changeMode(newMode){var oldMode=mode;mode=newMode;clearMap();if(mode=="none")$("#sliderContainer, .radiusInfo").hide("fast");else $("#sliderContainer, .radiusInfo").show("fast");if(mode=="auto"||mode=="custom")updateRatio();if(mode=="custom"){if(!customRoute||customRouteRadius){if(!startHandler){homeMarker.proprietary_marker.setImage(eval("startIcon"));startHandler=homeMarker.addListener("click",function(){if(startHandler){mapstraction.removeMapListener(startHandler);startHandler=null;}
getCustomRoute();});if(!customRoute){clearMap();if(!confirm("Begin plotting a custom route by clicking the home point.\nClick the map to create intermediate points and complete the route by clicking the work point.\nPoints can be dragged to a new location once plotted.")){changeMode(oldMode);}}}}}
else if(oldMode=="custom"){homeMarker.proprietary_marker.setImage(eval("homeIcon"));if(startHandler){mapstraction.removeMapListener(startHandler);startHandler=null;}}
if(!homeRadius&&(mode=="home"||mode=="both"))getRadius();else if(!workRadius&&(mode=="work"||mode=="both"))getRadius();else if(mode=="auto"&&!autoRoute)getAutoRoute();else if(mode=="custom"&&customRoute&&!customRouteRadius)updateCustomRoute();else{updateDistance();disableButtons(mode);updateMap();if(typeof(zoomRequired)=="undefined"||zoomRequired){zoomRequired=false;updateView();}
endLoading();}}
function resizeMap(margin){if(!margin)margin=0;$("#mapstraction").width($(window).width()-margin);$("#mapstraction").height($(window).height());if(mapstraction)mapstraction.maps['google'].checkResize();}
function clearMap(){disableButtons();mapstraction.removeAllPolylines();for(var i=0;i<mapstraction.markers.length;i++){if(mapstraction.markers[i]!=homeMarker&&mapstraction.markers[i]!=workMarker){mapstraction.markers[i].hide();}}}
function updateDistance(){var distance;for(var i=0;i<mapstraction.markers.length;i++){if(mapstraction.markers[i]!=homeMarker&&mapstraction.markers[i]!=workMarker){distance=mapstraction.markers[i].getAttribute(mode);document.getElementById("distance"+mapstraction.markers[i].getAttribute("id")).innerHTML=(!distance)?"":"<strong>Distance:</strong> "+distance.toFixed(2)+" Mile(s)";}}}
function updateView(){switch(mode){case'both':case'home':case'work':mapstraction.polylineCenterAndZoom(0);break;case'auto':mapstraction.polylineCenterAndZoom(mxn.fn.milesToKM(radius));break;case'custom':if(!customRouteRadius)mapstraction.visibleCenterAndZoom();else mapstraction.polylineCenterAndZoom(mxn.fn.milesToKM(radius));break;case'none':default:mapstraction.autoCenterAndZoom();break;}}
function updateMap(){mapstraction.removeAllPolylines();mapstraction.removeAllFilters();switch(mode){case'auto':if(autoRoute&&autoRouteRadius){autoRouteRadius.setWidth(radius*radiusRatio);mapstraction.addPolyline(autoRouteRadius);mapstraction.addPolyline(autoRoute);}
break;break;case'custom':if(customRoute&&customRouteRadius){customRouteRadius.setWidth(radius*radiusRatio);mapstraction.addPolyline(customRouteRadius);mapstraction.addPolyline(customRoute);}
break;case'both':mapstraction.addPolygon(homeRadius.getPolyline(mxn.fn.milesToKM(radius),"#00F"));mapstraction.addPolygon(workRadius.getPolyline(mxn.fn.milesToKM(radius),"#F00"));break;case'home':mapstraction.addPolygon(homeRadius.getPolyline(mxn.fn.milesToKM(radius),"#00F"));break;case'work':mapstraction.addPolygon(workRadius.getPolyline(mxn.fn.milesToKM(radius),"#F00"));break;case'none':break;}
if(mode!="none")mapstraction.addFilter(mode,'le',radius);var selectedCount=mapstraction.doFilter(function(marker){marker.show();if(marker!=homeMarker&&marker!=workMarker){marker.proprietary_marker.setImage(eval("defaultIcon"));info=document.getElementById("pointTitle"+marker.getAttribute("id"));if(info)info.style.display="block";}},function(marker){if(marker!=homeMarker&&marker!=workMarker){if(showAllMarkers){marker.proprietary_marker.setImage(eval("transIcon"));marker.show();}
else marker.hide();info=document.getElementById("pointTitle"+marker.getAttribute("id"));if(info)info.style.display="none";info=info.nextSibling;if(info)info.style.display="none";}});if(homeMarker)selectedCount--;if(workMarker)selectedCount--;buttonState("ctl00_MainContent_submit",(mode=="none"||selectedCount==0));document.getElementById('selected-info').innerHTML=selectedCount;}
function updateRatio(){radiusRatio=mxn.fn.milesToKM(mapstraction.getPixelRatio());}
function getRadius(){startLoading("Creating Radius");if(!homeRadius&&homeMarker){var homeLocation=homeMarker.location;homeRadius=new Radius(homeLocation,radiusQuality);}
if(!workRadius&&workMarker){var workLocation=workMarker.location;workRadius=new Radius(workLocation,radiusQuality);}
startLoading("Calculating Distances");var distance;var marker;$.startProgress("#progressBar",0,mapstraction.markers.length,function(i){marker=mapstraction.markers[i];if(marker!=homeMarker&&marker!=workMarker){if(homeLocation){distance=mxn.fn.KMToMiles(marker.location.distance(homeLocation));marker.setAttribute("home",distance);}
if(workLocation){distance=mxn.fn.KMToMiles(marker.location.distance(workLocation));marker.setAttribute("work",distance);}
if(homeMarker&&workMarker){distance=Math.min(marker.getAttribute('home'),marker.getAttribute('work'));marker.setAttribute('both',distance);}}},function(i){changeMode(mode);});}
function updateRadius(newRadius){if(newRadius<0)newRadius=0;if(newRadius>radiusMax)newRadius=radiusMax;radius=newRadius;document.getElementById('slider-info').value=radius.toFixed(1);if(radiusRefresh){updateMap();if(autoCentre)updateView();}}
function getAutoRoute(){startLoading("Calculating Route");wayPoints=new Array();wayPoints.push(homeMarker.location);wayPoints.push(workMarker.location);mapstraction.getRoute(wayPoints,function(route){route.simplify(routeTolerance);autoRoute=route;autoRouteRadius=new Polyline(autoRoute.points);autoRouteRadius.setColor("#FF0");startLoading("Calculating Distances");$.startProgress("#progressBar",0,mapstraction.markers.length,function(i){if(mapstraction.markers[i]!=homeMarker&&mapstraction.markers[i]!=workMarker){mapstraction.markers[i].setAttribute('auto',mxn.fn.KMToMiles(bdccGeoDistanceToPolyMtrs(autoRoute.toGoogle(),mapstraction.markers[i].location.toGoogle())/1000));}},function(i){changeMode(mode);});});}
function getCustomRoute(){clearMap();customRoute=new Polyline(new Array());customRoute.points.push(homeMarker.location);workMarker.proprietary_marker.setImage(eval("endIcon"));customHandler=workMarker.addListener("click",function(){if(mapHandler){mapstraction.removeMapListener(mapHandler);mapHandler=null;}
if(customHandler){mapstraction.removeMapListener(customHandler);customHandler=null;}
workMarker.proprietary_marker.setImage(eval("workIcon"));customRoute.points.push(workMarker.location);updateCustomRoute();});mapHandler=mapstraction.addMapListener("click",function(overlay,point){if(point){var pausePoint=new LatLonPoint();pausePoint.fromGoogle(point);var marker=addMarker(pausePoint,null,true,eval("pauseIcon"));marker.setAttribute("position",customRoute.points.length)
customRoute.points.push(pausePoint);redrawCustomRoute();marker.addListener("dragend",function(){marker.update();customRoute.points[marker.getAttribute("position")]=marker.location;redrawCustomRoute();});}});}
function redrawCustomRoute(){mapstraction.removeAllPolylines();mapstraction.addPolyline(customRoute);}
function updateCustomRoute(){startLoading("Calculating Distances");customRouteRadius=new Polyline(customRoute.points);customRouteRadius.setColor("#FF0");var max=mapstraction.markers.length;$.startProgress("#progressBar",0,max,function(i){i=max-1-i;if(mapstraction.markers[i]!=homeMarker&&mapstraction.markers[i]!=workMarker){if(mapstraction.markers[i].getAttribute('position'))mapstraction.removeMarker(mapstraction.markers[i]);else mapstraction.markers[i].setAttribute('custom',mxn.fn.KMToMiles(bdccGeoDistanceToPolyMtrs(customRoute.toGoogle(),mapstraction.markers[i].location.toGoogle())/1000));}},function(i){changeMode(mode);});}