function MapManager(a){MapManager.prototype.init=function(){this.canvasid=a;this.map="";this.customMarkers="";this.directionsDisplay="";this.directionsService="";this.place="";this.user="";this.geocoder=new google.maps.Geocoder();this.geocoder_information="";if(!google||!google.maps){console.error("You can not construct a map manager without google maps api!");return null}else{this.canvasid=a;var c=new google.maps.LatLng(25.02232,121.54812);var b={zoom:16,center:c,mapTypeId:google.maps.MapTypeId.ROADMAP,disableDefaultUI:true,scrollwheel:false,draggable:false};this.map=new google.maps.Map(document.getElementById(a),b)}};MapManager.prototype.setCustomMarkers=function(b){var c=this;c.customMarkers=b};MapManager.prototype.setMapOptions=function(b){this.map.setOptions(b)};MapManager.prototype.setPlace=function(b){this.place=new google.maps.Marker({map:this.map,position:b,icon:this.customMarkers.place?this.customMarkers.place:null});google.maps.event.addListener(this.place,"click",function(c){_this.toPositionByLatlng(c.latLng)})};MapManager.prototype.initSearchControl=function(){var e=this;e.setMapOptions({draggable:true,disableDoubleClickZoom:true,zoomControl:true,zoomControlOptions:{style:google.maps.ZoomControlStyle.LARGE,position:google.maps.ControlPosition.LEFT_CENTER}});function b(f,j){f.style.padding="2px";f.className="form_style_1";var g=document.createElement("input");g.type="text";g.id="addressField";g.size=25;g.style.marginTop="2px";$(g).attr("placeholder",gettext("Start From..."));f.appendChild(g);var h=document.createElement("input");h.type="button";h.id="goCenterButton";h.value=gettext("Route");h.className="btn_1";h.style.marginLeft="2px";h.style.marginRight="2px";f.appendChild(h);var i=document.createElement("img");i.id="getUserLocation";i.src=e.customMarkers.route;i.style.cursor="pointer";i.className="btn_1";f.appendChild(i);google.maps.event.addDomListener(h,"click",function(){var l=document.getElementById("addressField").value;var k=new google.maps.Geocoder();if(k){k.geocode({address:l},function(n,m){if(m==google.maps.GeocoderStatus.OK){j.map.panTo(n[0].geometry.location);j.setUserLocation(n[0].geometry.location)}else{alert(gettext("Geocode was not successful for the following reason: ")+m)}})}});google.maps.event.addDomListener(i,"click",function(){e.getUserCurrentLocation()})}var c=document.createElement("DIV");var d=new b(c,e);this.map.controls[google.maps.ControlPosition.TOP_RIGHT].push(c)};MapManager.prototype.getUserCurrentLocation=function(){var d=this;function b(e){if(e===true){alert(gettext("Geolocation service failed."))}else{alert(gettext("Your browser doesn't support geolocation. You can use search, thanks!"))}}if(navigator.geolocation){browserSupportFlag=true;navigator.geolocation.getCurrentPosition(function(e){initialLocation=new google.maps.LatLng(e.coords.latitude,e.coords.longitude);d.setUserLocation(initialLocation)},function(){b(browserSupportFlag)})}else{if(google.gears){browserSupportFlag=true;var c=google.gears.factory.create("beta.geolocation");c.getCurrentPosition(function(e){initialLocation=new google.maps.LatLng(e.latitude,e.longitude);d.setUserLocation(initialLocation)},function(){handleNoGeoLocation(browserSupportFlag)})}else{browserSupportFlag=false;b(browserSupportFlag)}}};MapManager.prototype.setMapToUserCurrentLocation=function(d){var e=this;function b(f){if(f===true){alert(gettext("Geolocation service failed."))}else{alert(gettext("Your browser doesn't support geolocation. You can use search, thanks!"))}}if(navigator.geolocation){browserSupportFlag=true;navigator.geolocation.getCurrentPosition(function(f){initialLocation=new google.maps.LatLng(f.coords.latitude,f.coords.longitude);d.panTo(initialLocation)},function(){b(browserSupportFlag)})}else{if(google.gears){browserSupportFlag=true;var c=google.gears.factory.create("beta.geolocation");c.getCurrentPosition(function(f){initialLocation=new google.maps.LatLng(f.latitude,f.longitude);d.panTo(initialLocation)},function(){handleNoGeoLocation(browserSupportFlag)})}else{browserSupportFlag=false;b(browserSupportFlag);return null}}};MapManager.prototype.initDirectionService=function(){this.directionsDisplay=new google.maps.DirectionsRenderer({markerOptions:{visible:false}});this.directionsService=new google.maps.DirectionsService();this.directionsDisplay.setMap(this.map)};MapManager.prototype.setUserLocation=function(b){var c=this;if(!this.user){this.user=new google.maps.Marker({position:b,map:this.map,icon:this.customMarkers.drag?this.customMarkers.drag:null});google.maps.event.addListener(this.user,"click",function(d){c.toPositionByLatlng(d.latLng)})}else{this.user.setPosition(b)}c.route()};MapManager.prototype.route=function(){var e=this;var d=this.user.getPosition();var b=this.place.getPosition();var c={origin:d,destination:b,travelMode:google.maps.DirectionsTravelMode.DRIVING,unitSystem:google.maps.DirectionsUnitSystem.METRIC};e.directionsService.route(c,function(f,g){if(g==google.maps.DirectionsStatus.OK){e.directionsDisplay.setDirections(f);e.toPositionByLatlng(d)}else{alert(gettext("search route failed, please slow your operation"))}})};MapManager.prototype.toPositionByLatlng=function(b){this.map.panTo(b)};MapManager.prototype.messageFromDiv=function(c){var b=$("#"+c)[0].innerHTML;alert(b)};MapManager.prototype.toPositionByAddress=function(b,d,c){var e=this;e.geocoder.geocode({address:b},function(g,f){if(f==google.maps.GeocoderStatus.OK){e.geocoder_information={address:g[0].formatted_address,location:g[0].geometry.location};e.toPositionByLatlng(g[0].geometry.location);if(c){c()}}else{if(d){e.messageFromDiv(d)}else{alert(gettext("Geocoder error."))}}})};MapManager.prototype.setMarker=function(b){if(this.marker){this.marker.setPosition(b)}else{this.marker=new google.maps.Marker({map:this.map,position:b,animation:google.maps.Animation.DROP,icon:this.customMarkers.drag?this.customMarkers.drag:null})}};MapManager.prototype.setInfoWindow=function(d){var b=document.getElementById(d).innerHTML;if(this.infowindow){if(b){this.infowindow.setContent(b)}this.infowindow.setPosition(this.marker?this.marker.getPosition():this.map.getCenter());this.infowindow.open(this.map)}else{var c={content:b,position:this.marker?this.marker.getPosition():this.map.getCenter()};this.infowindow=new google.maps.InfoWindow(c);this.infowindow.open(this.map)}if(this.infowindow){document.getElementById(d).innerHTML=""}}};
