Wiking.Follow = new function(){
  var objcount = 0;
  var padding = {
        top:50,
        left:50,
        right:50,
        bottom:50
  };
  this.start = function(){
      Wiking.Event.bindAsEventListener(this,'newpos',follow.bind(this));
  }
  this.stop = function(){
      Wiking.Event.unBindEventListener(this,'newpos');
  }
  this.setPadding = function(newpadding)
  {
      Object.extend(padding, newpadding || { });
  }
  var follow = function()
  {
      if (!(bb = createBoundingBox())) return; // specjalnie '='
      console.debug('got bb',bb);
      var z = Wiking.getMap().getBoundsZoomLevel(bb) - 1; //zoom
      var c = bb.getCenter();      console.debug('got c&z',c,z);
      //potencjalny problem, do poprawienia, zrewidować ustalenia zoomouta!
        
      if (Wiking.getMap().getZoom() > z && objcount > 1)
      {   // autozoom (tylko OUT), drugi warunek sprawdza czy BB nie jest jednoelementowy 
          //console.debug(this.map.getScale()+' > '+z+' (z)');
          Wiking.getMap().setCenter(c,z);
      }

      //var m = Wiking.getMap().getViewPortBB(new TSize(50,50));
      var size = Wiking.getMap().getSize();
      console.debug('got size',size);
      var sw = Wiking.getMap().fromContainerPixelToLatLng(new GPoint(padding.left,size.height-padding.bottom));
      var ne = Wiking.getMap().fromContainerPixelToLatLng(new GPoint(size.width-padding.right,padding.top));
      
      var m = new GLatLngBounds(sw,ne);

      if (!(m.containsBounds(bb)) && objcount > 0)
      {
          Wiking.getMap().panTo(c);
          /* 
           * Powinno być set center jeśli odległość większa niż x (odl c - z.getCenter)
           * aczkolwiek od jakiegoś czasu sama mapa już to obsłguje 
           */
      }
  }
  var createBoundingBox = function()
  { // zwraca boudingboxa z obiektami które mają być sledzone
      var
        lats = [],
        lngs = [];
      var group = Wiking.getObjects();
      var temp, lng, lat;
      for (var i=0,l=group.length; i < l; i++)
      {
          temp = group[i].getPosition();
          if (!temp) continue;
          lng = temp.lng();
          lat = temp.lat();
          if (group[i].getFlag('follow') == 1 && lng != undefined && lat != undefined && lng != 0 && lat != 0)
          { // temp
              lngs.push(lng);
              lats.push(lat);
          }
      }
      objcount = lats.length; //liczba obiektów
      if (objcount==0) return false;
      return new GLatLngBounds(new GLatLng(lats.min(),lngs.min()), new GLatLng(lats.max(),lngs.max()));
  }
  this.toString = function(){
      return "Follow";
  }
}

