function MarkerTracker(a,c,b){this.map_=c;this.marker_=a;this.enabled_=true;this.arrowDisplayed_=false;this.arrow_=null;this.oldArrow_=null;this.control_=null;b=b||{};this.iconScale_=MarkerTracker.DEFAULT_ICON_SCALE_;if(b.iconScale!=undefined){this.iconScale_=b.iconScale}this.padding_=MarkerTracker.DEFAULT_EDGE_PADDING_;if(b.padding!=undefined){this.padding_=b.padding}this.color_=MarkerTracker.DEFAULT_ARROW_COLOR_;if(b.color!=undefined){this.color_=b.color}this.weight_=MarkerTracker.DEFAULT_ARROW_WEIGHT_;if(b.weight!=undefined){this.weight_=b.weight}this.length_=MarkerTracker.DEFAULT_ARROW_LENGTH_;if(b.length!=undefined){this.length_=b.length}this.opacity_=MarkerTracker.DEFAULT_ARROW_OPACITY_;if(b.opacity!=undefined){this.opacity_=b.opacity}this.updateEvent_=MarkerTracker.DEFAULT_UPDATE_EVENT_;if(b.updateEvent!=undefined){this.updateEvent_=b.updateEvent}this.panEvent_=MarkerTracker.DEFAULT_PAN_EVENT_;if(b.panEvent!=undefined){this.panEvent_=b.panEvent}this.quickPanEnabled_=MarkerTracker.DEFAULT_QUICK_PAN_ENABLED_;if(b.quickPanEnabled!=undefined){this.quickPanEnabled_=b.quickPanEnabled}var d=new GIcon(a.getIcon());d.iconSize=new GSize(a.getIcon().iconSize.width*this.iconScale_,a.getIcon().iconSize.height*this.iconScale_);d.iconAnchor=new GPoint(a.getIcon().iconAnchor.x*this.iconScale_,a.getIcon().iconAnchor.y*this.iconScale_/2);d.shadow=null;this.babyMarker_=new GMarker(new GPoint(0,0),d);GEvent.bind(this.map_,this.updateEvent_,this,this.updateArrow_);GEvent.bind(this.marker_,"changed",this,this.updateArrow_);if(this.quickPanEnabled_){GEvent.bind(this.babyMarker_,this.panEvent_,this,this.panToMarker_)}this.updateArrow_()}MarkerTracker.DEFAULT_EDGE_PADDING_=25;MarkerTracker.DEFAULT_ICON_SCALE_=0.6;MarkerTracker.DEFAULT_ARROW_COLOR_="#ff0000";MarkerTracker.DEFAULT_ARROW_WEIGHT_=20;MarkerTracker.DEFAULT_ARROW_LENGTH_=20;MarkerTracker.DEFAULT_ARROW_OPACITY_=0.8;MarkerTracker.DEFAULT_UPDATE_EVENT_="move";MarkerTracker.DEFAULT_PAN_EVENT_="click";MarkerTracker.DEFAULT_QUICK_PAN_ENABLED_=true;MarkerTracker.prototype.disable=function(){this.enabled_=false;this.updateArrow_()};MarkerTracker.prototype.enable=function(){this.enabled_=true;this.updateArrow_()};MarkerTracker.prototype.updateArrow_=function(){if(!this.map_.getBounds().containsLatLng(this.marker_.getLatLng())&&this.enabled_){this.drawArrow_()}else{if(this.arrowDisplayed_){this.hideArrow_()}}};MarkerTracker.prototype.drawArrow_=function(){var c=this.map_.getBounds();var f=this.map_.fromLatLngToDivPixel(c.getSouthWest());var s=this.map_.fromLatLngToDivPixel(c.getNorthEast());var j=f.x+this.padding_;var i=s.y+this.padding_;var e=s.x-this.padding_;var a=f.y-this.padding_;var d=this.map_.fromLatLngToDivPixel(this.map_.getCenter());var n=this.map_.fromLatLngToDivPixel(this.marker_.getLatLng());var h=(d.y-n.y)/(d.x-n.x);var q=(d.y-h*d.x);if(n.x<e&&n.x>j){var r=n.x}else{if(d.x>n.x){var r=j}else{var r=e}}var p=h*r+q;if(p>a){p=a;r=(p-q)/h}else{if(p<i){p=i;r=(p-q)/h}}var l=Math.atan(-h);if(r>d.x){l=l+Math.PI}var k=this.map_.fromDivPixelToLatLng(new GPoint(r,p));var o=this.map_.fromDivPixelToLatLng(this.getRotatedPoint_(((-1)*this.length_),this.length_,l,r,p));var g=this.map_.fromDivPixelToLatLng(this.getRotatedPoint_(((-1)*this.length_),((-1)*this.length_),l,r,p));var d=this.map_.getCenter();var n=this.marker_.getLatLng();this.oldArrow_=this.arrow_;this.arrow_=new GPolyline([o,k,g],this.color_,this.weight_,this.opacity_);this.map_.addOverlay(this.arrow_);this.babyMarker_.setLatLng(this.map_.fromDivPixelToLatLng(this.getRotatedPoint_(((-2)*this.length_),0,l,r,p)));if(!this.arrowDisplayed_){this.map_.addOverlay(this.babyMarker_);this.arrowDisplayed_=true}if(this.oldArrow_){this.map_.removeOverlay(this.oldArrow_)}};MarkerTracker.prototype.hideArrow_=function(){this.map_.removeOverlay(this.babyMarker_);if(this.arrow_){this.map_.removeOverlay(this.arrow_)}if(this.oldArrow_){this.map_.removeOverlay(this.oldArrow_)}this.arrowDisplayed_=false};MarkerTracker.prototype.panToMarker_=function(){this.map_.panTo(this.marker_.getLatLng())};MarkerTracker.prototype.getRotatedPoint_=function(a,h,b,d,g){var f=h*Math.sin(b)-a*Math.cos(b)+d;var e=a*Math.sin(b)+h*Math.cos(b)+g;var c=new GPoint(f,e);return(c)};

