
/* - saferoutes_map.js - */
// http://www.saferoutes-wa.org/portal_javascripts/saferoutes_map.js?original=1
var sr_map;var test;var map_mode=0;var current_route=[];var current_route_markers=[];var current_polyline;var iconImages={'1':'red','2':'blue'};var exml;var school_location;var current_icon_id;var sr_map_bounds;var all_routes=[];var school_icon;var house_icon;var house_marker;var school_marker;
function loadMap(){if(GBrowserIsCompatible()){if(!document.getElementById("divMap")){alert('Welcome to the Interactive Map.  Close this window to continue')}
sr_map=new GMap2(document.getElementById("divMap"),{mapTypes:[G_NORMAL_MAP,G_HYBRID_MAP]});sr_map.addControl(new GSmallMapControl());sr_map.addControl(new GMapTypeControl());sr_map.setCenter(new GLatLng(47.65,-122.33),14);enableClickListeners();enableZoomListener()}
else{alert("Sorry, the Google Maps API is not compatible with this browser")}
sr_map_bounds=new GLatLngBounds();loadRoutes();loadTravelLogSidebar()}
function loadUrl(url,data,request,callback){var httpRequest=initializeRequest();if(!httpRequest){reportError(WS_M_AJAX_ERROR);return false}
httpRequest.onreadystatechange=function(){if(httpRequest.readyState==4){if(httpRequest.status==200){callback(httpRequest.responseXML)}
else{target.submit()}}};httpRequest.open(request,url,true);httpRequest.setRequestHeader('Content-Type','text/plain; charset=UTF-8');if(data){httpRequest.send(data)}}
function initializeRequest(){var httpRequest;if(window.XMLHttpRequest){httpRequest=new XMLHttpRequest()}
else if(window.ActiveXObject){try{httpRequest=new ActiveXObject("Msxml2.XMLHTTP")}
catch(e){try{httpRequest=new ActiveXObject("Microsoft.XMLHTTP")}
catch(er){return}}}
return httpRequest}
function postRouteSave(result){if(result=='created'){document.getElementById('routeOptions').style.display='none';setMapMode(3);clearRoute();loadRoutes()}
else{alert('error creating route')}}
function postMarkerSave(result){if(result=='created'){return}
else{alert('error creating route')}}
function addMyLocation(){var loc=document.getElementById('userLocation').innerHTML.split(' ');var lat=parseFloat(loc[0]);var lng=parseFloat(loc[1]);var pnt=new GLatLng(lat,lng);sr_map_bounds.extend(pnt);house_icon=new GIcon();house_icon.image='house.png';house_icon.shadow="http://labs.google.com/ridefinder/images/mm_20_shadow.png";var z=sr_map.getZoom();house_icon.iconSize=new GSize(z*2,z*2);house_icon.iconAnchor=new GPoint(z,z);house_marker=new GMarker(pnt,{icon:house_icon});sr_map.addOverlay(house_marker)}
function addSchool(){var loc=document.getElementById('schoolLocation').innerHTML;school_icon=new GIcon();school_icon.image='school.png';school_icon.shadow="http://labs.google.com/ridefinder/images/mm_20_shadow.png";var z=sr_map.getZoom();school_icon.iconSize=new GSize(z*2,z*2);school_icon.iconAnchor=new GPoint(z,z);var school_location=eval(loc);sr_map_bounds.extend(school_location);school_marker=new GMarker(school_location,{icon:school_icon});sr_map.addOverlay(school_marker)}
function loadRoutes(){if(exml){for(var j=0;j<exml.gpolylines.length;j++){sr_map.removeOverlay(exml.gpolylines[j])}}
document.getElementById('divListRoutes').innerHTML='';document.getElementById('routeName').value='';exml=new EGeoXml("exml",sr_map,"./kml?vrandom="+Math.random(),{sidebarid:"divListRoutes",sidebarfn:sideBar,createmarker:exmlCreateMarker,nozoom:true});addSchool();addMyLocation();sr_map.setZoom(sr_map.getBoundsZoomLevel(sr_map_bounds));sr_map.setCenter(sr_map_bounds.getCenter());exml.parse()}
function alphanumeric(alphane){var numaric=alphane;for(var j=0;j<numaric.length;j++){var alphaa=numaric.charAt(j);var hh=alphaa.charCodeAt(0);if((hh>47&&hh<58)||(hh>64&&hh<91)||(hh>96&&hh<123)||(hh==32)){}
else{return false}}
return true}
function saveRoute(){var title=document.getElementById('routeName').value;if(!title){alert('You must enter a unique title for your route');return}
if(!alphanumeric(title)){alert('you can only have basic alphanumeric characters for your route name');return}
if(!current_route.length){alert('you need to add some points to your route before saving');return}
coords=[];for(var i=0;i<current_route.length;i++){var pt=current_route[i];coords.push([pt.y.toFixed(5),pt.x.toFixed(6)])}
coords_joined=coords.join('|');var distance=calcDistance(current_route);url='./createRoute?Title='+title+'&Distance='+distance+'&coords='+coords_joined;GDownloadUrl(url,postRouteSave)}
function saveMarker(marker){var lng=marker.getPoint().x;var lat=marker.getPoint().y;title='marker_'+marker.marker_type+'_'+Math.random() * 10;url='./createPointOfInterest?Title='+title+'&lat='+lat+'&lng='+lng;GDownloadUrl(url,postMarkerSave)}
function highlightRoute(i){try{sr_map.removeOverlay(highlighted_route)}
catch(e){}
var pts=[];var cnt=exml.gpolylines[i].getVertexCount();for(var j=0;j<cnt;j++){pts.push(exml.gpolylines[i].getVertex(j))}
highlighted_route=new GPolyline(pts,'red',4);sr_map.addOverlay(highlighted_route)}
function getDistance(i){route=[];for(var j=0;j<exml.gpolylines[i].getVertexCount();j++){route.push(exml.gpolylines[i].getVertex(j))}
return calcDistance(route)}
function hideRoute(i,name){var dst=getDistance(i);exml.gpolylines[i].hide();newHTML='<a href="javascript:highlightRoute('+i+')">'+name+'</a> ('+dst.toFixed(2)+' mls / '+parseInt(dst * 12)+' blocks) [<a href=\'javascript:deleteItem("'+name+'","Route")\'>delete</a>] [<a href=\'javascript:showRoute("'+i+'","'+name+'")\'>show</a>]';document.getElementById('sidebarRouteId'+i).innerHTML=newHTML}
function showRoute(i,name){var dst=getDistance(i);exml.gpolylines[i].show();newHTML='<a href="javascript:highlightRoute('+i+')">'+name+'</a> ('+dst.toFixed(2)+' mls / '+parseInt(dst * 12)+' blocks) [<a href=\'javascript:deleteItem("'+name+'","Route")\'>delete</a>] [<a href=\'javascript:hideRoute("'+i+'","'+name+'")\'>hide</a>]';document.getElementById('sidebarRouteId'+i).innerHTML=newHTML}
function loadTravelLogSidebar(){jQuery('#travelLogSidebarList').load('travel_log_sidebar?random='+Math.random())}
function sideBar(myvar,name,type,i,graphic){if(type=="polyline"){var dst=getDistance(i);all_routes.push({'name':name,'id':i,'distance':dst})
return '<li id="sidebarRouteId'+i+'"><a href="javascript:highlightRoute('+i+')">'+name+'</a> ('+dst.toFixed(2)+' mls / '+parseInt(dst * 12)+' blocks) '+'[<a href=\'javascript:deleteItem("'+name+'","Route")\'>delete</a>] '+'[<a href=\'javascript:hideRoute("'+i+'","'+name+'")\'>hide</a>] </li>' }
else{return '<li>'+name+'[<a href=\'javascript:deleteItem("'+name+'","Route")\'>delete</a>] </li>' }
return ""}
function display_log_summary(json){var walk_total=0;var bike_total=0;var trips_total=0;var html='<div class="log_summary">Total distance walked: '
summary=json.summary;jQuery.each(summary, function(i,s){walk_total+=s.walk_distance;bike_total+=s.bike_distance;trips_total+=s.trips});html+=walk_total.toFixed(2)+' miles<br>Total distance biked: '+bike_total.toFixed(2)+' miles<br>'
html+='Your total trip count is '+trips_total;html+='<br>This graph shows your total travel in miles';html+='<div id="walk_graph"></div>';html+='</div>'
var ms=(walk_total+bike_total) *.55;html+='By walking instead of driving, you have saved $<b><font color="red">'+parseInt(ms)+'</font></b> in gas and other automotive costs!<br><br>';html+='<input type="submit" onclick="javascript:close_summary_window()" value="Close Summary">'
jQuery("#log_summary").html(html);jQuery.plot(jQuery("#walk_graph"),[{data:json.walk,label:"walking",lines:{show:true,fill:true}},{data:json.bike,label:"biking",lines:{show:true,fill:true}}],{xaxis:{mode:'time',timeformat:"%y/%b"}});jQuery("#tls_auto")[0].style.display='block'}
function load_travel_log_summary(){jQuery("#log_summary")[0].style.display='block';jQuery.getJSON('./tls?'+Math.random(),display_log_summary)}
function close_summary_window(){jQuery("#log_summary")[0].style.display='none';jQuery("#tls_auto")[0].style.display='none'}
function fill_in_log_creator(){var route_list=$("#tl_route_list")[0];if(route_list){var dropdownList=route_list;var dists=[];jQuery.each(all_routes, function(a,b){var option=new Option(b.name,b.distance);dists.push(b.distance)
if(jQuery.browser.msie){dropdownList.add(option)}
else{dropdownList.add(option,null)}})}
else{var log_title=jQuery('#log_entry_title')[0].innerHTML;jQuery.getJSON('get_log_json?title='+log_title+'&random='+Math.random(),
function(data){jQuery('#tl_date_picker').val(data.date);jQuery('#route_edit_distance').html(data.distance);jQuery('#route_group_size').val(data.group_size);if(data.notes&&data.notes!='undefined'){jQuery('#tl_title').val(data.notes)};if(data.wb=='bike'){jQuery('.walkbike')[1].checked=true}})}
javascript:jQuery('#tl_date_picker').datepick()}
function close_log_window(){jQuery("#create_log")[0].style.display='none'}
function confirm_new_log_added(){close_log_window();loadTravelLogSidebar()}
function create_log(){var notes=jQuery('#tl_notes').val();if(!notes){notes=''}
if(jQuery('#tl_route_list')[0]){var distance=jQuery('#tl_route_list').val()}
else{distance=jQuery('#route_edit_distance')[0].innerHTML}
var group_size=jQuery('#tl_group_size').val();var walk_bike=jQuery('.walkbike:checked').val();var date=jQuery.datepicker.formatDate('yy-mm-dd',jQuery.datepicker.parseDate('mm/dd/yy',jQuery('#tl_date_picker').val()));jQuery.get('./createTravelLog',{'notes':notes,'distance':distance,'walk_bike':walk_bike,'group_size':group_size,'date':date},confirm_new_log_added);loadTravelLogSidebar()}
function load_travel_log_creator(title){edit_url='';if(title){edit_url='?edit='+title}
jQuery("#create_log")[0].style.display='block';jQuery("#create_log").load('./create_travel_log/'+edit_url,fill_in_log_creator);return false}
function calcDistance(route){var dist=0;for(var i=0;i<route.length-1;i++){dist+=route[i].distanceFrom(route[i+1])}
miles=dist/1609.344;return miles}
function enableZoomListener(){GEvent.addListener(sr_map,"zoomend",function(){sr_map.removeOverlay(house_marker);sr_map.removeOverlay(school_marker);addMyLocation();addSchool()})}
function enableClickListeners(){GEvent.addListener(sr_map,"click",function(overlay,point){if(point){addPoint(point)}})}
function disableClickListeners(point,overlay){GEvent.clearListeners(sr_map,"click")}
function postDelete(res){if(res=='deleted'){alert('item updated')}
else{alert(res)}
sr_map.clearOverlays();loadRoutes();loadTravelLogSidebar()}
function deleteItem(id,portal_type){sr_map.closeInfoWindow();url='./deleteSafeRouteItem?objid='+id+'&portal_type='+portal_type;GDownloadUrl(url,postDelete);close_log_window()}
function exmlCreateMarker(point,name,desc,style){try{current_icon_id=desc.split('marker_')[1].split('_')[0]}
catch(e){console.log(e);console.log(desc);current_icon_id=1}
var marker=createMarker(point,parseInt(current_icon_id));GEvent.addListener(marker,"click", function(){marker.openInfoWindowHtml('<a href=\'javascript:deleteItem("'+name+'","PointOfInterest")\'>delete this marker</a>')});sr_map.addOverlay(marker)}
function drawRoute(route_array){if(current_polyline){sr_map.removeOverlay(current_polyline)}
current_polyline=new GPolyline(route_array,"#0D32DF",5,.7);sr_map.addOverlay(current_polyline)}
function clearRoute(){sr_map.removeOverlay(current_polyline);current_route=[];for(m in current_route_markers){sr_map.removeOverlay(current_route_markers[m])}}
function getIcon(icon_number){icons={1:'icon_tree.png',2:'icon_cat.png',3:'icon_crossingguard.png',4:'icon_everyonewalks.png',5:'icon_fastcar.png',6:'icon_loudstreet.png',7:'icon_meandog.png',8:'icon_nosidewalks.png',9:'icon_placetoplay.png',10:'icon_puddle.png'};return icons[icon_number]}
function setMapMode(mode,icon){map_mode=mode;if(mode==1){document.getElementById('routeOptions').style.display='block'}
if(mode==2){current_icon_id=icon}
if(mode==3){disableClickListeners}}
function addPoint(point){if(map_mode==1){marker=createMarker(point,'vertex');current_route_markers.push(marker);sr_map.addOverlay(marker);current_route.push(point);drawRoute(current_route);document.getElementById('currentRouteDistance').innerHTML=calcDistance(current_route).toFixed(3)}
if(map_mode==2){marker=createMarker(point,current_icon_id);GEvent.addListener(marker,"click", function(){marker.openInfoWindowHtml('<a href=\'javascript:deleteItem("'+name+'","PointOfInterest")\'>delete this marker</a>')});sr_map.addOverlay(marker);saveMarker(marker)}}
function clearLastPoint(){if(current_route&&current_route.length>1){sr_map.removeOverlay(current_route_markers[current_route_markers.length-1]);current_route_markers.pop();current_route.pop();drawRoute(current_route)}}
function createMarker(point,marker_type){var custom_icon=new GIcon();if(marker_type=='vertex'){custom_icon.image="vertex.png";custom_icon.iconSize=new GSize(11,11);custom_icon.iconAnchor=new GPoint(5,5)}
else{custom_icon.image=getIcon(current_icon_id);custom_icon.shadow="http://labs.google.com/ridefinder/images/mm_20_shadow.png";custom_icon.iconSize=new GSize(22,42);custom_icon.iconAnchor=new GPoint(11,21);custom_icon.shadowSize=new GSize(37,34);custom_icon.infoWindowAnchor=new GPoint(9,2);custom_icon.infoShadowAnchor=new GPoint(18,25)}
marker=new GMarker(point,{icon:custom_icon});marker.marker_type=marker_type;return marker}

