dtI;
dtDelay=0;

var MaxCountMirror;
var CountMirror;
var MaxCountMove;
var CountMove;
var MaxCountRotate;
var CountRotate;
var dalpha;
var dtFeatureClone;
var dtFeature;

function SchiebLos()
{
    dtFeature = findPentomino("ZVIYTPWNXFLU".substr(dtI,1));
    var i=0;
    while(solutions[dtIDX][i++][0]!="ZVIYTPWNXFLU".substr(dtI,1));
    i--;
    dI=i;

    if(solutions[dtIDX][dI][3]>0)
    {   dalpha = -(360-solutions[dtIDX][dI][3])/50;
        MaxCountRotate = 50;
        CountRotate=0;
    }
    else
    {   dalpha = 0;
        MaxCountRotate = 0;
        CountRotate=0;
    }

    deltaRotateFeature();
}

function deltaRotateFeature()
{
    try{
        var objBounds = dtFeature.geometry.getBounds();
    }catch(err){ return false;}

    var x = (objBounds.left+objBounds.right )/2;
    var y = (objBounds.top +objBounds.bottom)/2;

    var origin = {};

    origin.x = x;
    origin.y = y;

    for(var i=0;i<1;i++)
    {
        dtFeature.geometry.rotate(dalpha, origin);
        dtFeature.layer.drawFeature(dtFeature);
        CountRotate++;
        if(CountRotate == MaxCountRotate)
            break;
    }
    if(CountRotate < MaxCountRotate)
        window.setTimeout("deltaRotateFeature()", dtDelay);
    else
    {
        if(solutions[dtIDX][dI][4]>0)
        {   MaxCountMirror = 50;
            CountMirror=0;
            dtFeatureClone = dtFeature.clone();
        }
        else
        {   MaxCountMirror = 0;
            CountMirror=0;
        }

        deltaMirrorFeature();
    }
}

function deltaMirrorFeature()
{
    if(CountMirror < 2*MaxCountMirror)
    {
        for(var i=0;i<1;i++)
        {
            dtMirrorFeature();
            CountMirror++;
            if(CountMirror == 2*MaxCountMirror)
                break;
        }
        if(CountMirror < 2*MaxCountMirror+1)
            window.setTimeout("deltaMirrorFeature()", dtDelay);
    }
    else
    {
        try{
            objBounds = dtFeature.geometry.getBounds();
        }catch(err){ return false;}

        var x0 = (objBounds.left+objBounds.right )/2;
        var y0 = (objBounds.top +objBounds.bottom)/2;

        var x1 = solutions[dtIDX][dI][1];
        var y1 = solutions[dtIDX][dI][2];

        var rw = x1-x0;
        var rh = y1-y0;

        if(Math.abs(rh)>Math.abs(rw))
        {
            drhi = (rh>0) ? 1 : ((rh<0) ? -1 : 0);
            if(rh==0)
                drwi = (rw>0) ? 1 : -1;
            else
                drwi = (rw>0) ? Math.abs(rw/rh) : (-1)*Math.abs(rw/rh);
                MaxCountMove = (rh!=0) ? Math.abs(rh) : Math.abs(rw);
        }
        else
        {
            drwi = (rw>0) ? 1 : ((rw<0) ? -1 : 0);
            if(rw==0)
                drhi = (rh>0) ? 1 : -1;
            else
                drhi = (rh>0) ? Math.abs(rh/rw) : (-1)*Math.abs(rh/rw);
            MaxCountMove = (rw!=0) ? Math.abs(rw) : Math.abs(rh);
        }
        CountMove = 0;
        deltaMoveFeature();
    }
}

function dtMirrorFeature()
{
    dtFeature.attributes.mirror = 1;

    try{
        var objFpt      = dtFeature.geometry.components[0].components;
        var objFptClone = dtFeatureClone.geometry.components[0].components;
    }catch(err){ return false;}

    var objBounds = dtFeatureClone.geometry.getBounds();
    var ax = (objBounds.left+objBounds.right )/2;
    imax = objFpt.length-1

    for(var i=0;i<imax;i++)
        objFpt[i].x = ax + (objFptClone[i].x*(MaxCountMirror-CountMirror)/MaxCountMirror - ax*(MaxCountMirror-CountMirror)/MaxCountMirror);
    objFpt[imax].x = objFpt[0].x;

    dtFeature.layer.drawFeature(dtFeature);
}

function deltaMoveFeature()
{
    var imax = (window.ActiveXObject) ? 32 : 8;

    feature = dtFeature;
    for(var i=0;i<imax;i++)
    {
        try{
            feature.geometry.move(drwi, drhi);
            feature.layer.drawFeature(feature);
        }catch(err){ return false;}
        CountMove++;
        if(CountMove == MaxCountMove)
            break;
    }
    if(CountMove < MaxCountMove)
        window.setTimeout("deltaMoveFeature()", dtDelay);
    else
    {   //if(solutions[dtIDX][dI][4]>0)
        //    MirrorFeature(dtFeature,solutions[dtIDX][dI][4]);
        ctrlDragFeature_SnapPoint(dtFeature);
        dtI++;
        if(dtI<12)
            SchiebLos();
    }
}
