var COLOR_RED="#FF0000";var COLOR_GREEN="#00CC00";var COLOR_BLUE="#0000FF";var COLOR_YELLOW="#FFFF33";var COLOR_PURPLE="#AA00AA";var COLOR_ORANGE="#FF8800";var COLOR_VIOLET="#FF00FF";var COLOR_AQUA="#00CCCC";var COLOR_BLACK="#000000";BCDB_View.prototype.DB_CODES={crash_type:{solo:"Solo crash",vehicle:"Collision with motor vehicle",bicycle:"Collision with other bicycle",pedestrian:"Collision with pedestrian",other:"Other"},hazard_type:{pothole:"Pothole",pavement:"Bad pavement",grate:"Sewer grate",utility_cover:"Utility cover",vegetation:"Overgrown vegetation",debris:"Debris ",signal:"Signal",lane_markings:"Lane markings",facility:"Bike facility",signage:"Signage",bike_parking:"Bike parking",construction:"Construction zone",vehicles:"Parked vehicles",road_design:"Road design",motorist:"Motorist behavior",cyclist:"Cyclist/pedestrian behavior",tracks:"Embedded rails",animal:"Animal",nearby_hazard:"Hazardous objects",water:"Water leak",temporary:"Temporary obstacle",other:"Other"},theft_type:{assault:"Confrontation/assault",lock:"Lock compromised",anchor:"Anchor compromised",no_anchor:"Locked but unanchored",unlocked:"Unlocked ",other:"Other"},vehicle_type:{car:"Car",small_truck:"Van/SUV/small truck",large_truck:"Bus/large truck",motorcycle:"Motorcycle/scooter",other:"Other"},anchor_type:{bike_rack:"Bike rack",street_sign:"Street sign",parking_meter:"Parking meter",other_metal:"Other metal",other_wood:"Other wood",no_anchor:"No anchor",other:"Other"},lock_type:{cable_basic:"Cable/basic",cable_heavy:"Cable/heavy-duty",chain_basic:"Chain/basic",chain_heavy:"Chain/heavy-duty",ulock_basic:"U-lock/basic",ulock_heavy:"U-lock/heavy-duty",olock:"O-lock",skewer:"Skewer",other:"Other"},time_unattended:{a:"<30 min",b:"30 min - 1 hr",c:"1-3 hrs",d:"4-12 hrs",e:"13-24 hrs",f:">24 hrs"},monetary_value:{a:"<$200",b:"$200-$500",c:"$501-$1,000",d:"$1,001-$2,000",e:">$2,000"},part_stolen:{whole_bike:"Whole bike",wheels:"Wheel(s)",parts:"Parts or accessories"},location_type:{street_residential:"On street - residential",street_business:"On street - business",street_other:"On street - other",building_interior:"Inside building",building_exterior:"Outside building",vehicle:"Vehicle rack or interior",other:"Other",arterial:"Arterial road",secondary:"Secondary road",sidewalk:"Sidewalk",trail:"Bike trail",lot:"Parking lot",driveway:"Driveway",off_road:"Off-road"},bicycle_type:{road:"Road",mountain:"Mountain/hybrid",utility:"Utility",fixed_gear:"Fixed gear",recumbent:"Recumbent",tandem:"Tandem",folding:"Folding",BMX:"BMX",other:"Other"},injury_severity:{none:"None",moderate:"Moderate",serious:"Serious",life_threatening:"Life-threatening",fatal:"Fatal"},time_of_day:{morning:"Morning",afternoon:"Afternoon",evening:"Evening",night:"Night",late_night:"Late night",unknown:"Unknown"},priority:{urgent:"Urgent",high_risk:"High risk",high_annoyance:"High annoyance",normal:"Normal",enhancement:"Enhancement"},weather:{rain:"rain",snow:"snow/ice",fog:"fog/mist",wind:"heavy wind"},road_conditions:{dry:"Dry",wet:"Wet",flooded:"Flooded",snow_ice:"Snow/ice"},lighting:{dawn_dusk:"Dawn/dusk",daytime:"Daytime",night:"Night"},geometry:{1:"Bike ran into object",2:"Bike lost stability and crashed",3:"Vehicle came from side",4:"Vehicle turned after passing bike",5:"Vehicle turned into passing bike",6:"Vehicle turned into oncoming bike",7:"Vehicle turned after stop",8:"Vehicle turned into crosswalk",9:"Vehicle turned into wrong-way bike",10:"Vehicle overtook from rear",11:"Vehicle rear-ended stopped bike",12:"Vehicle backed into bike",13:"Bike hit open door of vehicle",14:"Bike swerved into vehicle path",15:"Bike turned into vehicle path",16:"Bike crossed into vehicle path",17:"Bike rear-ended stopped vehicle",18:"Bike turned into passing bike",19:"Bike turned into oncoming bike",20:"Bike crossed into path of bike",21:"Bike swerved into other bike",22:"Bikes bumped/locked wheels while parallel",23:"Bike rear-ended other bike",24:"Pedestrian turned into passing bike",25:"Pedestrian turned into oncoming bike",26:"Pedestrian crossed into path of bike",27:"Bike swerved into pedestrian",28:"Bike turned into same-direction pedestrian",29:"Bike turned into oncoming pedestrian",30:"Bike ran straight into pedestrian"}};function BCDB_View(a){var b=this;b.radius=50;b.smallRadius=5;b.store=new Store();b.US_LATITUDE=39.368279;b.US_LONGITUDE=-97.382812;b.GMAP_MAX_ZOOM_LEVEL=19;b.GMAP_COUNTRY_LEVEL_ZOOM=3;b.location=a.location;b.mapType=a.mapType;b.mapDivId=a.mapDivId;b.targetId=a.targetId;b.restoreFlag=a.restoreFlag;b.reportType=a.reportType;b.sliceField=a.sliceField;b.dateField=a.dateField;b.targetType=a.targetType;b.listingsDivId=a.listingsDivId;b.listingTemplate=a.listingTemplate;b.adjustFlag=a.adjustFlag;b.listingsHandler=new ListingsHandler(b);b.addLocationMarker=function(c,d){if(!b.locationMarker){b.locationMarker=new GMarker(d,{draggable:true});GEvent.addListener(b.locationMarker,"dragend",updateLocation);b.gmap.addOverlay(b.locationMarker);updateLocation(d)}};b.enableSubmitButton=function(e,d){if(d==b.GMAP_MAX_ZOOM_LEVEL){var c=document.getElementById("submitButton");c.disabled=false;c.setAttribute("class","submitButton")}};b.resetMap_end=function(c){b.location.lat=c.lat();b.location.lng=c.lng();b.gmap=new google.maps.Map2(document.getElementById(b.mapDivId));b.gmap.setCenter(c,11);b.gmap.addControl(new GLargeMapControl());b.gmap.enableScrollWheelZoom();b.markerManager=new MarkerManager(b.gmap);request=new DataRequest(b,"map");request.send();b.legendHandler.updateLegend(b.sliceField)};b.init_end=function(e){var d;b.gmap=new google.maps.Map2(document.getElementById(b.mapDivId));b.location.lat=e.lat();b.location.lng=e.lng();switch(b.mapType){case"input":var c=b.adjustFlag?b.GMAP_MAX_ZOOM_LEVEL:11;b.gmap.setCenter(e,c);b.gmap.addControl(new GLargeMapControl());if(b.restoreFlag){b.restoreLocationMarker(e)}else{GEvent.addListener(b.gmap,"click",b.addLocationMarker)}break;case"set_location":b.gmap.setCenter(e,b.GMAP_COUNTRY_LEVEL_ZOOM);b.gmap.addControl(new GLargeMapControl());GEvent.addListener(b.gmap,"click",b.addLocationMarker);break;case"duplicates":b.gmap.setCenter(e,b.GMAP_MAX_ZOOM_LEVEL);b.gmap.addControl(new GSmallMapControl());b.gmap.enableScrollWheelZoom();b.markerManager=new MarkerManager(b.gmap);b.legendHandler=new LegendHandler(b);d=new DataRequest(b,"map");d.send();break;case"locator":b.gmap.setCenter(e,3);b.gmap.addControl(new GSmallMapControl());break;case"results":b.gmap.setCenter(e,11);b.gmap.addControl(new GLargeMapControl());b.markerManager=new MarkerManager(b.gmap);b.cloudHandler=new CloudHandler(b);b.legendHandler=new LegendHandler(b);d=new DataRequest(b,"map");d.send();break;case"single_report":b.gmap.setCenter(e,14);b.gmap.addControl(new GSmallMapControl());b.markerManager=new MarkerManager(b.gmap);b.legendHandler=new LegendHandler(b);d=new DataRequest(b,"map");d.send();break;default:break}b.gmap.addControl(new GMapTypeControl());b.gmap.addControl(new GScaleControl());b.gmap.enableScrollWheelZoom()};b.init_start()}BCDB_View.prototype.resetMap=function(a){this.resetMap_start(a)};BCDB_View.prototype.resetMap_start=function(a){var b=this;b.location=a;b.address=b.location.city+", "+b.location.statoid+" "+b.location.country;var c=new GClientGeocoder();c.getLatLng(b.address,b.resetMap_end)};BCDB_View.prototype.clear=function(){var a=this;if(a.markerManager){a.markerManager.clearMarkers()}if(a.listingsHandler){a.listingsHandler.clearListings()}if(a.store){a.store.clear()}if(a.cloudHandler){a.cloudHandler.clear()}if(a.legendHandler){a.legendHandler.clear()}};BCDB_View.prototype.updateFilterResults=function(){var a=this;a.filterResults();a.listingsHandler.updateReportLinks()};BCDB_View.prototype.filterResults=function(){var g=this;var h=g.cloudHandler.tagManager.criteria;var f=g.reports;var j=g.store;var d,b;var k=new Array();var a=new Array();var c=new Array();for(var e in f){d=f[e];b=j.contains(d);valid=h.accepts(d);if(!b&&valid){k.push(d)}else{if(b&&!valid){a.push(d)}}if(valid){c.push(d)}}g.removeResultsFromMap(a);g.addResultsToMap(k)};BCDB_View.prototype.removeResultsFromMap=function(b){var e=this;var a,f;for(var d in b){a=b[d];f=e.store.remove(a);for(var c in f){e.markerManager.removeMarker(f[c])}}};BCDB_View.prototype.addResultsToMap=function(b){var r=this;var c=r.store;var j=r.listingsHandler;var l=r.legendHandler.getSliceField();var f,o=[],a=[],g=[],p;var d,t,e,q,s,k;var h=r.gmap.getSize().width/2;for(var n in b){var m=b[n];d=m.lat;t=m.lng;k=m.id;e=j.getReportValue(m,l);q=r.DB_CODES[l]?r.DB_CODES[l][e]:e;color=r.legendHandler.getColorForReport(l,e);s=m.title;if(r.targetId&&k==r.targetId){p=getIcon("TARGET_REPORT",color);f=new GMarker(new GLatLng(d,t),{title:s,icon:p});f.bcdbId=k;o.push(f);a.push(f);g.push(f)}else{if(n<50){p=getIcon("LARGE",color);f=new GMarker(new GLatLng(d,t),{title:s,icon:p});f.bcdbId=k;f.bindInfoWindowHtml(r.getInfoWindowHtmlForReport(m,r.reportType),{maxWidth:h});o.push(f);a.push(f);g.push(f)}else{if(n<200){p=getIcon("SMALL",color);f=new GMarker(new GLatLng(d,t),{title:s,icon:p});f.bcdbId=k;o.push(f)}p=getIcon("MEDIUM",color);f=new GMarker(new GLatLng(d,t),{title:s,icon:p});f.bcdbId=k;f.bindInfoWindowHtml(r.getInfoWindowHtmlForReport(m,r.reportType),{maxWidth:h});a.push(f)}}}markerManager=r.markerManager;markerManager.addMarkers(o,0,13);markerManager.addMarkers(a,14);markerManager.refresh();r.markerManager=markerManager;c.addMarkers(o);c.addMarkers(a)};BCDB_View.prototype.restoreLocationMarker=function(b){var a=this;if(!a.locationMarker){a.locationMarker=new GMarker(b,{draggable:true});GEvent.addListener(a.locationMarker,"dragend",updateLocation);a.gmap.addOverlay(a.locationMarker);updateLocation(b)}};BCDB_View.prototype.init_start=function(){var b=this;if(b.location.lat&&b.location.lng){b.init_end(new GLatLng(b.location.lat,b.location.lng))}else{if(b.location.city&&b.location.statoid&&b.location.country){b.address=b.location.city+", "+b.location.statoid+" "+b.location.country;var c=new GClientGeocoder();c.getLatLng(b.address,b.init_end)}else{var d=getClientLocation();for(var a in d){b.location[a]=d[a]}if(!(b.location.lat&&b.location.lng)){b.location={lat:47.615421,lng:-122.321777,city:"Seattle",statoid:"WA",country:"US"};b.listingsHandler.updateReportLinks("NO_CLIENT_LOCATION");setSessionLocation()}b.init_end(new GLatLng(b.location.lat,b.location.lng))}}};function setSessionLocation(){jQuery.ajax({type:"GET",url:"/pub/data/location",data:{},dataType:"json"})}BCDB_View.prototype.getInfoWindowHtmlForReport=function(g){var i=this;var h=g.report_type;var n="/pub/report/"+h+"/"+g.id;var l=g.title;if(h=="crash"){var j=i.DB_CODES.geometry[g.geometry];var e=g.injury_severity;var o=g.short_main_desc||"No description";return'<div><div class="infoWindowTitle">'+l+'</div><div class="infoWindowSubhead">'+j+'</div><div class="infoWindowSubsubhead">Injuries: '+e+'</div><div class="infoWindowParagraph">'+o+'</div><div class="infoWindowReportLink"><a href="'+n+'">View full report</a></div></div>'}else{if(h=="hazard"){var p=g.hazard_type;if(p=="other"){p=g.hazard_type_other}else{p=i.DB_CODES.hazard_type[p]}var k=i.DB_CODES.priority[g.priority];var a=g.hazard_status;var o=g.short_main_desc||"No description";return'<div><div class="infoWindowTitle">'+l+'</div><div class="infoWindowSubhead">'+k+'</div><div class="infoWindowSubsubhead">Status: <i>'+a+'</i></div><div class="infoWindowParagraph">'+o+'</div><div class="infoWindowReportLink"><a href="'+n+'">View full report</a></div></div>'}else{if(h=="theft"){var m=g.theft_type;if(m=="other"){m=g.theft_type_other}else{m=i.DB_CODES.theft_type[m]}var b=g.theft_status;var c=g.reward;var d=b=="stolen"?"":'<div class="infoWindowSubsubhead">Status: '+b+"</div>";var f=c?'<div class="infoWindowSubsubhead">Reward: '+c+"</div>":"";var o=g.short_main_desc||"No description";return'<div><div class="infoWindowTitle">'+l+'</div><div class="infoWindowSubhead">'+m+"</div>"+(d||f)+'<div class="infoWindowParagraph">'+o+'</div><div class="infoWindowReportLink"><a href="'+n+'">View full report</a></div></div>'}}}};BCDB_View.prototype.reportTitle=function(a){var c=this;var d;switch(a.report_type){case"crash":var b=a.crash_type;if(b=="other"){b=a.crash_type_other}else{b=c.DB_CODES.crash_type[b]}return b+", "+a.crash_date;case"hazard":break}};function LegendHandler(a){var b=this;b.view=a;b.defaultSliceField=a.sliceField;b.legendListSelector="#legendList";b.OrderHash=b.createOrderHash();b.updateLegend(b.defaultSliceField)}LegendHandler.prototype.createOrderHash=function(){var e=this;var c={};var a;for(var d in e.OrderMap){a=e.OrderMap[d];c[d]={};for(var b in a){c[d][a[b]]=b}}return c};LegendHandler.prototype.getOrdinal=function(b,c){var a=this;if(a.OrderHash[b]){return a.OrderHash[b][c]|0}else{return 0}};LegendHandler.prototype.getSliceField=function(){var a=this;return a.currentSliceField?a.currentSliceField:a.defaultSliceField};LegendHandler.prototype.clear=function(){var a=this;a.currentSliceField=null;jQuery(a.legendListSelector).empty()};LegendHandler.prototype.updateLegend=function(a){var e=this;if(e.currentSliceField&&e.currentSliceField==a){return}e.clear();var d=jQuery(e.legendListSelector);var b=e.OrderMap[a];if(!b){b=e.OrderMap[e.defaultSliceField];a=e.defaultSliceField}for(var c in b){value=b[c];d.append(e.getLegendRow(a,value))}e.currentSliceField=a};LegendHandler.prototype.getLegendRow=function(a,e){var d=this;var c;if(d.view.DB_CODES[a]){c=d.view.DB_CODES[a][e]}else{c=e.replace(/_/g," ");c=c.ucFirst()}var b=d.getColorForReport(a,e);return'<li><div style="background-color:'+b+'"></div>'+c+"</li>"};LegendHandler.prototype.OrderMap={report_type:["crash","hazard","theft"],crash_type:["vehicle","bicycle","solo","pedestrian","other"],lighting:["dawn_dusk","daytime","night"],visibility:["good","fair","poor"],road_conditions:["dry","wet","flooded","snow_ice"],traffic:["light","moderate","heavy"],weather:["rain","snow","fog","wind"],injury_severity:["none","moderate","serious","life_threatening","fatal"],cyclist_gender:["F","M"],cyclist_age_group:["<20","20-29","30-39","40-49","50-59","60+"],cyclist_experience:["beginner","intermediate","advanced","expert"],bicycle_type:["road","mountain","utility","fixed_gear","recumbent","tandem","folding","BMX","other"],helmet:["yes","no"],lights:["yes","no"],priority:["urgent","high_risk","high_annoyance","normal","enhancement"],theft_type:["assault","lock","anchor","no_anchor","unlocked","other"],lock_type:["cable_basic","cable_heavy","chain_basic","chain_heavy","ulock_basic","ulock_heavy","olock","skewer"],anchor_type:["bike_rack","street_sign","parking_meter","other_metal","other_wood","no_anchor","other"],time_unattended:["a","b","c","d","e","f"],monetary_value:["a","b","c","d","e"],time_of_day:["morning","afternoon","evening","night","late_night","unknown"],part_stolen:["whole_bike","wheels","parts"],bicycle_type:["road","mountain","utility","fixed_gear","recumbent","tandem","folding","BMX","other"]};LegendHandler.prototype.getColorForReport=function(b,c){var a=this;if(b=="crash_type"){switch(c){case"vehicle":return COLOR_RED;case"bicycle":return COLOR_GREEN;case"solo":return COLOR_BLUE;case"pedestrian":return COLOR_PURPLE;case"other":return COLOR_YELLOW;default:return COLOR_BLACK}}else{if(b=="priority"){switch(c){case"urgent":return COLOR_RED;case"high_risk":return COLOR_YELLOW;case"high_annoyance":return COLOR_PURPLE;case"normal":return COLOR_BLUE;case"enhancement":return COLOR_GREEN;default:return COLOR_BLACK}}else{if(b=="report_type"){switch(c){case"crash":return COLOR_RED;case"hazard":return COLOR_YELLOW;case"theft":default:return COLOR_BLUE}}else{switch(a.getOrdinal(b,c)){case 0:return COLOR_RED;case 1:return COLOR_YELLOW;case 2:return COLOR_BLUE;case 3:return COLOR_GREEN;case 4:return COLOR_PURPLE;case 5:return COLOR_ORANGE;case 6:return COLOR_VIOLET;case 7:return COLOR_AQUA;default:return COLOR_BLACK}}}}};function Store(){var a=this;a.markerStore={}}Store.prototype.remove=function(a){var b=this;var c=b.markerStore[a.id];delete b.markerStore[a.id];return c};Store.prototype.contains=function(a){var b=this;if(b.markerStore[a.id]){return 1}return 0};Store.prototype.clear=function(a){var b=this;b.markerStore={}};Store.prototype.addMarkers=function(f){var d=this;var a=d.markerStore;var g,b,e;for(var c in f){b=f[c];g=b.bcdbId;if(!a[g]){a[g]=[b]}else{a[g].push(b)}}};CloudHandler.prototype.alphabetical=function(d,c){return d[0]<c[0]?-1:c[0]<d[0]?1:0};CloudHandler.prototype.tagSort=function(e){var d=this;var a=d.view.legendHandler.OrderMap[e];var b={};if(!a){return d.alphabetical}for(var c in a){b[a[c]]=c}return function(g,f){return b[g[0]]<b[f[0]]?-1:b[f[0]]<b[g[0]]?1:0}};CloudHandler.prototype.hideGroup=function(b){var a=this;var c="#"+b+"GroupDiv";jQuery(c).css("display","none")};CloudHandler.prototype.showGroup=function(b){var a=this;var c="#"+b+"GroupDiv";jQuery(c).css("display","block")};CloudHandler.prototype.showCloud=function(j,f){var m=this;m.clouds[f]=1;var q,r,d,l,e,o,b,k;var g=null,n=null,p;var a="#"+f+"GroupDiv";for(var c in j){q=j[c];for(var h in q){l=q[h][1];if(l==0){continue}if(g==null||g>l){g=l}if(n==null||n<l){n=l}}}for(var c in j){q=j[c];q.sort(m.tagSort(c));e=TagCloud.create();b=f+"_"+c+"Div";for(var h in q){d=q[h][0];if(!d){continue}d=m.view.DB_CODES[c]?m.view.DB_CODES[c][d]:d;l=q[h][1];tagId=q[h][2]||q[h][0];if(l==0){continue}r=e.add(d,l,m.tagManager.getTagUrl(f,c,tagId),"",tagId);jQuery(r.linkElement).bind("click",{tag:r,attribute:c,attributeGroup:f},m.tagManager.getTagCallback(f))}e.loadEffector("CountSize",{min:g,max:n});e.setup(b)}m.showGroup(f);return false};CloudHandler.prototype.clear=function(){var b=this;b.tagManager.criteria.clearAll();for(var a in b.attributeGroups){attributeGroup=b.attributeGroups[a];if(attributeGroup!="locations"){b.hideGroup(attributeGroup)}}};function CloudHandler(b){var e=this;e.needInit=1;e.view=b;e.reportType=b.reportType;e.tagManager=new TagManager(e.view);e.clouds=new Hash();e.initCloud=function(j){var i=j.data.attributeGroup;var k=j.data.linkSelector;if(e.needInit||i=="locations"){e.view.clear();e.needInit=0}var g=e.view.location;if(i=="locations"||(g.city&&g.statoid&&g.country)||(g.lat&&g.lng)){var h=new DataRequest(e.view,"cloud",i);h.send()}else{jQuery("#locationsCloudLink").trigger("click");alert("Please specify a city and state. You must load city data into the map before selecting a filter.")}jQuery(k).unbind("click");jQuery(k).bind("click",{attributeGroup:i,linkSelector:k},e.hideCloud);jQuery(k).addClass("selected");return false};e.hideCloud=function(h){var g=h.data.attributeGroup;var i=h.data.linkSelector;delete e.clouds[g];e.tagManager.removeGroup(g);e.hideGroup(g);if(g!="locations"){e.view.updateFilterResults()}if(e.clouds.isEmpty()){e.view.clear()}jQuery(i).unbind("click");jQuery(i).bind("click",{attributeGroup:g,linkSelector:i},e.initCloud);jQuery(i).removeClass("selected");return false};var f,a,d;switch(e.reportType){case"crash":e.attributeGroups=["factor","conditions","cyclist","geometry","lesson","locations"];break;case"hazard":e.attributeGroups=["hazard_type","locations"];break;case"theft":e.attributeGroups=["howStolen","stolenBikes","stolenWheels","stolenParts","locations"];break}for(var c in e.attributeGroups){d=e.attributeGroups[c];f="#"+d+"CloudLink";jQuery(f).bind("click",{attributeGroup:d,linkSelector:f},e.initCloud);a="#"+d+"GroupCloseButton";jQuery(a).bind("click",{attributeGroup:d,linkSelector:f},e.hideCloud)}}function TagManager(a){var b=this;b.view=a;b.criteria=new Criteria(a);b.toggleTag=function(f){var c=f.data.tag;var e=f.data.attribute;var d=f.data.attributeGroup;b.tagIsActive(e,c,d)?b.deactivateTag(e,c,d):b.activateTag(e,c,d);b.view.updateFilterResults();return false};b.updateLocationCloud=function(h){var c=h.data.tag;var g=h.data.attribute;var f,d={};var e=b.view.location;b.view.clear();switch(g){case"city":b.view.resetMap({city:c.name,statoid:e.statoid,country:e.country});b.view.cloudHandler.needInit=1;break;case"statoid":requestType="cloud";d.statoid=c.name;d.country=e.country;b.view.location=d;f=new DataRequest(b.view,"cloud","locations");f.send();break;case"country":requestType="cloud";d.country=c.name;b.view.location=d;f=new DataRequest(b.view,"cloud","locations");f.send();break}return false}}TagManager.prototype.getTagUrl=function(e,c,d){var g=this;var h;var i=g.view.location;var f=i.country?"/"+i.country:"";f=(f&&i.statoid)?f+"/"+i.statoid:"";f=(f&&i.city)?f+"/"+i.city:"";var a="/pub/list/"+g.view.reportType+f;if(e=="locations"){return""}else{var b=c+"="+d;a+="?"+b;return a}};TagManager.prototype.getTagCallback=function(b){var a=this;switch(b){case"locations":return a.updateLocationCloud;break;default:return a.toggleTag}};TagManager.prototype.activateTag=function(d,a,c){var b=this;jQuery(a.linkElement).removeClass("toggleOff");jQuery(a.linkElement).addClass("toggleOn");if(b.isFirstTag()){b.view.legendHandler.updateLegend(d)}b.criteria.addTag(d,a,c)};TagManager.prototype.deactivateTag=function(d,a,c){var b=this;jQuery(a.linkElement).removeClass("toggleOn");jQuery(a.linkElement).addClass("toggleOff");b.criteria.removeTag(d,a,c)};TagManager.prototype.tagIsActive=function(d,a,c){var b=this;return b.criteria.contains(d,a,c)};TagManager.prototype.removeGroup=function(b){var a=this;a.criteria.removeGroup(b)};TagManager.prototype.isFirstTag=function(){var a=this;return a.criteria.isEmpty()};function Criteria(a){var b=this;b.view=a;b.tagTree={};b.idTree={}}Criteria.prototype.toQueryString=function(){var e=this;var a;var f=[];for(var d in e.tagTree){for(var c in e.tagTree[d]){a=e.tagTree[d][c];for(var b in a){f.push(c+"="+encodeURIComponent(a[b]))}}}return f.length>0?f.join("&"):""};Criteria.prototype.toQueryDesc=function(){var f=this;var j,e;var b=[];var h=[];var g;for(var c in f.tagTree){for(var a in f.tagTree[c]){j=f.tagTree[c][a];if(f.view.DB_CODES[a]){for(var d in j){e=f.view.DB_CODES[a][j[d]];b.push(e)}}else{b=j}a=a.replace(/_/g," ");g=a+": "+b.join(" or ");g="("+g+")";h.push(g)}}return h.length>0?h.join(" and "):""};Criteria.prototype.clearAll=function(){var a=this;a.tagTree={}};Criteria.prototype.clearGroup=function(b){var a=this;delete a.tagTree[b]};Criteria.prototype.contains=function(e,a,d){var c=this;if(e.match("_geometry")){e="geometry"}var f=c.tagTree[d];if(!f){return 0}var b=f[e];if(!b){return 0}if(jQuery.inArray(a.id,b)==-1){return 0}return 1};Criteria.prototype.isEmpty=function(){var b=this;var a=1;for(var c in b.tagTree){a=0;break}return a};Criteria.prototype.groupIsEmpty=function(d){var c=this;var e=c.tagTree[d];if(!e){return 1}var a=1;for(var b in e){a=0;break}return a};Criteria.prototype.removeGroup=function(b){var a=this;delete a.tagTree[b]};Criteria.prototype.addTag=function(g,b,f){var e=this;var a=e.tagTree[f];var d;if(g.match("_geometry")){g="geometry"}if(a){var c=a[g];if(c){c.push(b.id)}else{a[g]=[b.id]}}else{e.tagTree[f]={};e.tagTree[f][g]=[b.id]}};Criteria.prototype.removeTag=function(f,a,e){var d=this;if(f.match("_geometry")){f="geometry"}var b=d.tagTree[e][f];var c=jQuery.inArray(a.id,b);b.splice(c,1);if(b.length==0){delete d.tagTree[e][f]}if(d.groupIsEmpty(e)){d.removeGroup(e)}};Criteria.prototype.accepts=function(a){var e=this;var b;if(e.isEmpty()){return 0}for(var d in e.tagTree){group=e.tagTree[d];for(var c in group){b=group[c];if(c=="weather"||c=="factor"||c=="lesson"){if(!arraysIntersect(a[c],b)){return 0}}else{if(jQuery.inArray(a[c],b)==-1){return 0}}}}return 1};function arraysIntersect(d,c){for(var f in d){for(var e in c){if(d[f]==c[e]){return 1}}}return 0}function DataRequest(b,a,d){var c=this;c.view=b;c.gmap=b.gmap;c.targetId=b.targetId;c.targetType=b.targetType;c.radius=b.radius;c.location=b.location;c.mapType=b.mapType;c.reportType=b.reportType;c.sliceField=b.sliceField;c.dateField=b.dateField;c.requestType=a;c.attributeGroup=d||"";c.params="lat="+uu(c.location.lat)+"&lng="+uu(c.location.lng)+"&city="+uu(c.location.city)+"&statoid="+uu(c.location.statoid)+"&country="+uu(c.location.country)+"&radius="+uu(c.radius)+"&report_type="+uu(c.reportType)+"&request="+uu(c.mapType)+"&target_type="+uu(c.targetType)+"&attribute_group="+uu(c.attributeGroup);c.processMapDataRequest=function(f,e){c.view.reports=f.reports;c.view.addResultsToMap(c.view.reports);if(c.view.listingsHandler){c.view.listingsHandler.updateReportLinks()}};c.processCloudDataRequest=function(f,e){c.view.cloudHandler.results=f.results;c.view.cloudHandler.showCloud(f.results,c.attributeGroup);c.view.listingsHandler.updateReportLinks()};c.onError=function(e,g,f){c.view.listingsHandler.updateReportLinks("DATA_ERROR")};if(a=="cloud"){c.callback=c.processCloudDataRequest;c.url="/pub/data/group"}else{if(a=="map"){c.callback=c.processMapDataRequest;c.url="/pub/data/report"}}c.send=function(){c.view.listingsHandler.updateReportLinks("LOADING");jQuery.ajax({type:"GET",url:c.url,data:c.params,dataType:"json",contentType:"application/json; charset=utf-8",success:c.callback,error:c.onError})}}function uu(a){return a?a:""}ListingsHandler.prototype.clearListings=function(){var a=this;jQuery(a.listingsDivSelector).empty()};ListingsHandler.prototype.getReportValue=function(a,d){var c=this;var b;if(d=="weather"||d=="factor"||d=="lesson"){b=a[d];return b.length>0?b[0]:null}else{return a[d]}};ListingsHandler.prototype.addReportLink=function(d,a){var c=this;var b='<li><a target="_blank" href="'+a+'">'+d+"</a></li>";jQuery(c.viewReportsListSelector).append(b)};ListingsHandler.prototype.updateReportLinks=function(d){var h=this;var j=h.view.location;var f=h.view.reportType;var i,e="",c="";switch(d){case"LOADING":jQuery(h.mapTitleSelector).text("Loading data ...");return;case"NO_CLIENT_LOCATION":jQuery(h.mapTitleSelector).text("Sorry, we tried but can't figure out where you are. Defaulting to Seattle, WA");return;case"DATA_ERROR":jQuery(h.mapTitleSelector).text("Sorry, there was a problem loading the data. Please reload the page.");return;default:}jQuery(h.viewReportsListSelector).empty();if(h.view.cloudHandler){i=h.view.cloudHandler.tagManager.criteria;e=i.toQueryString();c=i.toQueryDesc()}var b,k;var g=f=="mixed"?"":f+" ";var a="Latest "+g+"reports for ";if(j.city&&j.statoid&&j.country){k=["/pub/list",f,j.country,j.statoid,j.city].join("/");a+=j.city+", "+j.statoid}else{if(j.lat&&j.lng){k=["/pub/list",f].join("/");e=[e,"lat="+j.lat,"lng="+j.lng,"radius=25"].join("&");a+=j.lat+", "+j.lng}else{if(j.statoid&&j.country){a="Choose a city or postal code in "+j.statoid+", "+j.country+" ..."}else{if(j.country){a="Choose a location in "+j.country+" ..."}else{a="Choosing location ..."}}}}if(e){b=k+"?"+e;a+=" - "+c;h.addReportLink("Current query",b)}if(j.city&&j.statoid&&j.country){k=["/pub/list",f,j.country,j.statoid,j.city].join("/");h.addReportLink(j.city,k)}if(j.statoid&&j.country){k=["/pub/list",f,j.country,j.statoid].join("/");h.addReportLink(j.statoid,k)}if(j.country){k=["/pub/list",f,j.country].join("/");h.addReportLink(j.country,k)}k=["/pub/list",f].join("/");h.addReportLink("World",k);jQuery(h.mapTitleSelector).text(a)};ListingsHandler.prototype.updateReportListings=function(d){var f=this;var k,e,a,c,g,h,j,l;for(var b in d){a=d[b];c=a.report_type;h=a.street+", "+a.city;e=jQuery(f.listingTemplateSelector).clone();e.removeAttr("id");e.find(".reportTitle").text(f.view.reportTitle(a,f.reportType));if(c=="crash"){j=a.short_main_desc||"No description";l=e.find(".reportRow");l.eq(0).find(".reportLabel").text("Location:");l.eq(0).find(".reportData").text(h);l.eq(1).find(".reportLabel").text("Geometry:");l.eq(1).find(".reportData").text(a.geometry);l.eq(2).find(".reportLabel").text("Injuries:");l.eq(2).find(".reportData").text(a.injury_severity);l.eq(3).find(".reportLabel").text("Description:");l.eq(3).find(".reportData").text(j);l.slice(4,20).replaceWith();e.appendTo(f.listingsDivSelector)}else{if(c=="hazard"){}}}};function ListingsHandler(a){var b=this;b.view=a;b.mapTitleSelector="#mapTitle";b.viewReportsListSelector="#viewReportsList";b.listingsDivId=a.listingsDivId;b.listingTemplate=a.listingTemplate;b.listingsDivSelector="#"+a.listingsDivId;b.listingTemplateSelector="#"+a.listingTemplate}function getIcon(a,b){var c={};switch(a){case"SINGLE_MARKER":case"TARGET_REPORT":c.primaryColor=b||"#00FF00";c.strokeColor="#000000";c.label="";c.labelColor="#000000";c.addStar=true;c.starPrimaryColor="#FFFF00";c.starStrokeColor="#000000";return MapIconMaker.createLabeledMarkerIcon(c);case"LARGE":c.width=32;c.height=32;c.primaryColor=b||"#FF0000";c.cornerColor="#FFFFFF";c.strokeColor="#000000";return MapIconMaker.createMarkerIcon(c);case"MEDIUM":c.width=24;c.height=24;c.primaryColor=b||"#FF0000";c.cornerColor="#FFFFFF";c.strokeColor="#000000";return MapIconMaker.createMarkerIcon(c);case"SMALL":c.width=6;c.height=6;c.primaryColor=b||"#FF0000";c.label="";c.labelSize=0;c.labelColor="#000000";c.shape="roundrect";return MapIconMaker.createFlatIcon(c);case"DEFAULT":default:return new GIcon(G_DEFAULT_ICON)}}function updateLocation(b){if(b!=null){document.getElementById("lat").value=b.lat();document.getElementById("lng").value=b.lng();var a=new GClientGeocoder();a.getLocations(b,updateAddress)}}function getClientLatLng(){if(google.loader.ClientLocation&&google.loader.ClientLocation.latitude&&google.loader.ClientLocation.longitude){return new GLatLng(google.loader.ClientLocation.latitude,google.loader.ClientLocation.longitude)}return}function getClientLocation(){if(google.loader.ClientLocation&&google.loader.ClientLocation.address.city&&google.loader.ClientLocation.address.region&&google.loader.ClientLocation.address.country_code){return{city:google.loader.ClientLocation.address.city,statoid:google.loader.ClientLocation.address.region,country:google.loader.ClientLocation.address.country_code,lat:google.loader.ClientLocation.latitude,lng:google.loader.ClientLocation.longitude}}return}function showCrashReport(){}function updateAddress(c){if(!c||c.Status.code!=200){alert("Sorry, we had a problem with the Google Map server. Please try again or report the problem. Status Code:"+c.Status.code)}else{place=c.Placemark[0];var h=place.AddressDetails.Country.AdministrativeArea;var e=h.SubAdministrativeArea?h.SubAdministrativeArea.Locality:h.Locality;var g=h.SubAdministrativeArea?h.SubAdministrativeArea.DependentLocality:h.DependentLocality;var b,d,f,i,a;a=place.AddressDetails.Country.CountryNameCode;if(e){b=e.Thoroughfare?e.Thoroughfare.ThoroughfareName:"";d=e.LocalityName;f=h.AdministrativeAreaName;i=e.PostalCode?e.PostalCode.PostalCodeNumber:""}else{if(g){b=g.Thoroughfare?g.Thoroughfare.ThoroughfareName:"";d=g.DependentLocalityName;f=h.AdministrativeAreaName;i=g.PostalCode?g.PostalCode.PostalCodeNumber:""}else{b=h.Thoroughfare?h.Thoroughfare.ThoroughfareName:"";d="";f=h.AdministrativeAreaName;i=h.PostalCode?h.PostalCode.PostalCodeNumber:""}}document.getElementById("locationStr").innerHTML=place.address;document.getElementById("address").value=place.address;document.getElementById("street").value=b;document.getElementById("city").value=d;document.getElementById("statoid").value=f;document.getElementById("postal_code").value=i;document.getElementById("country").value=a}}function simpleMap(){BCDB_map=new google.maps.Map2(document.getElementById("map"));BCDB_map.setCenter(new GLatLng(38.548165,-97.207031),4);BCDB_map.addControl(new GLargeMapControl());BCDB_map.addControl(new GMapTypeControl())}function worldMap(){BCDB_map=new google.maps.Map2(document.getElementById("map"));BCDB_map.setCenter(new GLatLng(38.548165,-97.207031),3);BCDB_map.addControl(new GLargeMapControl());BCDB_map.addControl(new GMapTypeControl());BCDB_map.addControl(new GScaleControl())}function Hash(){}Hash.prototype.isEmpty=function(){var c=this;var a=1;for(var b in c){if(b=="isEmpty"){continue}a=0;break}return a};Object.prototype.toString=function(){var b="";for(var a in this){b+=a+": "+this[a]+"<br />"}return b};String.prototype.ucFirst=function(){return this.substr(0,1).toUpperCase()+this.substr(1,this.length)};