engine.move.objects=new Array();

engine.move.object=function(id,data)
{
  this.id=id;
  this.data=data;
  

 
  this.status=1;
  var pos=engine.object.getPos(this.data['ob']);  

  this.data['startPos']=pos;

  this.data['posRelative']=new Array();
  this.data['posRelative'][0]=this.data['ob'].offsetLeft;
  this.data['posRelative'][1]=this.data['ob'].offsetTop;   
  
  this.data['steps']=this.data['steps']?this.data['steps']:Math.abs((this.data['x']-pos[0])+(this.data['y']-pos[1]))/35;


   if(this.data['fixed'])
     this.data['posParent']=[0,0];
   else
  this.data['posParent']=engine.object.getPos(this.data['ob'].parentNode);  
    
  this.data['xPerStep']=this.data['steps']?(this.data['x']-pos[0])/this.data['steps']:0;
  this.data['yPerStep']=this.data['steps']?(this.data['y']-pos[1])/this.data['steps']:0;
  
  this.data['xState']=this.data['xPerStep']>0?1:-1;
  this.data['yState']=this.data['yPerStep']>0?1:-1;
  this.time=0;

  this.move=function()
  {
    if(!this.status || !this.data['steps'])
      return;
    var id=this.id;
    var now=new Date();
    var t =now.getTime();    
    if(this.time)
    {
      this.data['posRelative'][0]+=this.data['xPerStep']*Math.min(5,(t-this.time)/100);
      this.data['posRelative'][1]+=this.data['yPerStep']*Math.min(5,(t-this.time)/100);

      if((this.data['posRelative'][0]*this.data['xState']>(this.data['x']-this.data['posParent'][0])*this.data['xState'] &&
          this.data['startPos'][0]!=this.data['x'])
          ||
          (this.data['posRelative'][1]*this.data['yState']>(this.data['y']-this.data['posParent'][1])*this.data['yState'] &&
          this.data['startPos'][1]!=this.data['y']))
      { 
        this.data['ob'].style.left=this.data['x']-this.data['posParent'][0]+'px';
        this.data['ob'].style.top =this.data['y']-this.data['posParent'][1]+'px';    

        if(this.data['fFinish'])
        {
          for(var i=0;i<this.data['fFinish']['functions'].length;i++)
          {
          this.data['fFinish']['functions'][i]();
          
          }
        }
          this.status=0;
        return;    
      }
      else
      {
      this.data['ob'].style.left=parseInt(this.data['posRelative'][0])+'px';
      this.data['ob'].style.top =parseInt(this.data['posRelative'][1])+'px';
      }
    }
    this.time =t;
        if(this.data['fMove'] && this.data['fMove']['functions'])
        {
          for(var i=0;i<this.data['fMove']['functions'].length;i++)
          {
          this.data['fMove']['functions'][i]();
          
          }
        }    
    setTimeout('engine.move.objects['+id+'].move()',100);  
  }
  
}
engine.move.relative=function(ob,x,y,finish,stay,move)
{
  if(x==0 && y==0)
  {
        if(finish)
        for(var i=0;i<finish['functions'].length;i++)
        {
        finish['functions'][i]();
        
        }  
  
  }
  ob=engine.object.all(ob);

  var pos=engine.object.getPos(ob);

  var id=engine.move.objects.length;
  var data=
  {
    ob:ob,
    x:pos[0]+x,
    y:pos[1]+y,
    fFinish:finish,
    fMove:move,
    fixed:stay
  };

  engine.move.objects[id]=new engine.move.object(id,data)
  engine.move.objects[id].move();
}

