GMapPanoramWalker=function(A){this.gmap=A.gmap;this.pano=A.pano;this.interval=A.interval;this.panoclient=new GStreetviewClient();this.addEvents({start:true,next:true,end:true});this.runner=new Ext.util.TaskRunner();GMapPanoramWalker.superclass.constructor.call(this,arguments)};Ext.extend(GMapPanoramWalker,Ext.util.Observable,{steps:new Array(),getNearestPanorama:function(C,B,A){if(this.panoclient){this.panoclient.getNearestPanorama(C,B.createDelegate(A))}},addStep:function(B,A){if(B&&A){this.getNearestPanorama(B,function(C){if(C.code==200){if(A(B,C.location.latlng)){this.steps.push(C.location.latlng)}}else{A(B,null)}},this)}},moveStep:function(A,C,B){if(C&&B){this.getNearestPanorama(C,function(E){if(E.code==200){if(B(C,E.location.latlng)){var D=this.findStep(A);if(0<D){this.steps[D]=E.location.latlng}}}else{B(A,null)}},this)}},getSteps:function(){return steps},findStep:function(B){for(var A=0;A<this.steps.length;A++){if(latlang.equals(this.steps[A])){return A}}return -1},setInterval:function(A){this.interval=A},getInterval:function(){return this.interval},start:function(){if(this.task){this.stop()}if(this.fireEvent("start",this.gmap,this.pano)){this.index=0;this.task={run:function(){this.index++;this.fireEvent("next",this.gmap,this.pano,this.index,this.steps)},interval:this.interval,scope:this};this.runner.start(this.task)}},stop:function(){if(this.runner&&this.task){this.runner.stop(this.task);this.task=null;this.fireEvent("stop",this.gmap,this.pano)}},clear:function(){this.stop();this.steps=[]}});