//(c) copyright 2009 veloroutes.org

var recording_flag=0,route,totalDist=0,currPolyline,currMarker,currSegDist=0,markers=[],currRouteID=-1,siteURL="http://veloroutes.org",editMode=false,routeColor="#00FF00",trailColor="",badRouteColor="#FF0000",currElevation=0,twoBackElevation=0,totalEleGain=0,lastElevation=null,elevationPts=[],currMaxEle=0,eleUnit="ft",distUnit="mi",speedUnit=" mph",useMetric=false,metricRatio=1,footRatio=1,lastEle,feetInMile=5280,imgRegex=/.jpg|png|gif/,infoBarShown=true,doGisSearch=false,doJumpToLoc=false; function toggleGisSearch(){this.doGisSearch=!this.doGisSearch}function toggleLocJump(){this.doJumpToLoc=!this.doJumpToLoc}function createAjaxObj(){var a=false;return a=GXmlHttp.create()}function toFixedPrecision(a){return new GPoint(a.lat().toFixed(6),a.lng().toFixed(6))}function getNode(a){a=a.childNodes;return a.length>0?a[0].nodeValue:""}function setVal(a,b){var c=getElem(a);if(c.innerHTML)getElem(a).innerHTML=b;else if(c.value)getElem(a).value=b} function getVal(a){return document.getElementById(a).value}function getElem(a){return document.getElementById(a)}function formatDist(a){return a}function dbg(a){GLog.write(a)} function loadWeather(){try{var a=createAjaxObj();city||(city="seattle");a.open("GET","/rssweather_"+city.replace(/ /,"_")+".xml",true);a.onreadystatechange=function(){if(a.readyState==4)if(a.status==200||a.status==302||a.status==304){var c=a.responseXML;if(c.getElementsByTagName("item").length==0)document.getElementById("rssweather").innerHTML="<b>Error</b> fetching weather RSS feed...<br />";else{document.getElementById("rssweather").innerHTML="<b>current weather:</b><br>"+transformWeather(c.getElementsByTagName("item")[0].getElementsByTagName("description")[0].firstChild.nodeValue.toLowerCase())+ " <br><b>"+transformWeather(c.getElementsByTagName("channel")[0].getElementsByTagName("title")[0].firstChild.nodeValue.toLowerCase())+" "+c.getElementsByTagName("item")[1].getElementsByTagName("title")[0].firstChild.nodeValue.toLowerCase()+"</b>: "+transformWeather(c.getElementsByTagName("item")[1].getElementsByTagName("description")[0].firstChild.nodeValue.toLowerCase())+' <a TARGET="about:blank" href="http://www.rssweather.com/hw3.php?pands='+cityZip+'">details</a>';a=null}}else document.getElementById("rssweather").innerHTML= "<b>Error</b> fetching weather RSS feed...<br />"};a.send(null)}catch(b){document.getElementById("rssweather").innerHTML="<b>Error</b> fetching weather RSS feed...<br />"}} function transformWeather(a){return a.replace(/(freezing|sprinkles|rain|drizzle|showers)/ig,'<b class="bb">$1</b>').replace(/(wind)(\w*)/ig,'<b class="bg">$1$2</b>').replace(/(breezy|gusts|thunderstorms*|cloudy|overcast|fog|haze|mist|smog)/ig,'<b class="bg">$1</b>').replace(/(clear)/ig,'<b class="bc">$1</b>').replace(/(snow|ice|sleet)/ig,'<b class="bw">$1</b>').replace(/(\d+)/g,'<b class="medText">$1</b>').replace(/(sunny)/ig,'<b class="by">$1</b>')} function copyTo(a){var b={};for(var c in a)b[c]=a[c];return b} function searchRoutes(a,b,c){var d=getVal("searchValue");if(this.doJumpToLoc)findAddrOnMap(d,true,true);else{var e=createAjaxObj();if(b=getElem("loading"))b.innerHTML='<img src="/images/loading.gif" alt="searching..."/>';document.getElementById("searchBtn").disabled=true;a=a?a:1E3;if(!c&&this.doGisSearch)findAddrOnMap(d,true);else{e.open("GET","/perl/search_routes.cgi?search_data="+d+"&result_cnt="+a,true);e.onreadystatechange=function(){try{if(e&&e.readyState==4){if(e.status==200||e.status==302|| e.status==304){var f=e.responseText;if(!c&&(this.doGisSearch||!f))findAddrOnMap(d,true,true);else getElem("searchResults").innerHTML=f}else alert("There was a problem getting the route!\nError Code: "+e.status);document.getElementById("searchBtn").disabled=false;var g=getElem("loading");if(g)g.innerHTML=""}}catch(h){alert("Error getting route data: "+h)}};e.send(null);urchinTracker("/home/route_search")}}} function searchGis(a,b){var c=0;try{if(a){var d=createAjaxObj();d.open("GET","/perl/search_routes.cgi?g=1&latLong="+a.lat()+","+a.lng()+"&name="+b,true);d.onreadystatechange=function(){if(d.readyState==4){if(d.status==200||d.status==302||d.status==304){var f=d.responseText;if(f){getElem("searchResults").innerHTML=f;c=1}else alert("no routes found via gis-search")}document.getElementById("searchBtn").disabled=false;if(f=getElem("loading"))f.innerHTML=""}};d.send(null);urchinTracker("/home/route_search_gis")}}catch(e){alert("Error doing GIS search: "+ e.toString())}return c}function findAddrOnMap(a,b,c){geoCodeAddr(null,a,true,c)}function jumpToLoc(a,b,c){c=/d{5}/;a=siteURL+"/?x="+a.lng()+"&y="+a.lat()+"&z="+b;window.location=a} function geoCodeAddr(a,b,c,d){var e=new GClientGeocoder,f;if(!c&&this.localSearch)(new RegExp(mapCity,"i")).test(b)||(b+=", "+mapCity+", "+mapState);e.getLatLng(b,function(g){if(!d&&this.doGisSearch)return searchGis(g,b);if(a!=null&&g!=null)moveMapTo(a,g.lat(),g.lng(),16);else g?jumpToLoc(g,12,b):alert("sorry, google can't find the address: "+b+". be more specific.")});return f} function findAddr(){var a=document.getElementById("addrTB").value;a==null||a.length==0?alert("enter an address!"):geoCodeAddr(this.map,a,false,true)}function formatTime(a){a=a.split(/:/);var b=parseInt(a[0]);return(b<12?b:b%12)+":"+a[1]}function entsub(a,b){if(a&&a.which==13)if(b)if(b==1)findAddr();else return true;else searchRoutes(300,true)} function fadeUp(a,b,c,d){if(a){a.fade&&clearTimeout(a.fade);a.style.backgroundColor="rgb("+b+","+c+","+d+")";if(!(b==255&&c==255&&d==255)){var e=b+Math.ceil((255-b)/10),f=c+Math.ceil((255-c)/10),g=d+Math.ceil((255-d)/10);a.fade=setTimeout(function(){fadeUp(a,e,f,g)},100)}}else dbg("invalid ele")}function fadeBlueToWhite(a){fadeUp(getElem(a),172,211,243)};
