//
// Move, Rotate and Mirror Pentominoes
//
//            0                  1                 2                3                4                 5                 6                 7              8               9                  10               11
//           [V,-350,-150,  0], [U,-400,150,  0], [T,-50,150,  0], [F,150,150,  0], [Z,-250,-50,  0], [I,150,-150,  0], [L,300,-200,  0], [Y,100,  0,  0], [P,400,50, 90], [N,-100,-200,  0], [W,350,150,  0], [X,-250,150,  0]];
//           [V,-350,-150,  0], [U,-400,150,  0], [T,-50,150,  0], [F,150,150,  0], [Z,-250,-50,  0], [I,150,-150,  0], [L,300,-200,  0], [Y,100,  0,  0], [P,400,50,  0], [N,-100,-200,  0], [W,350,150,  0], [X,-250,150,  0]];
//var myArr = [[  -350,-150,  0], [  -400,150, 90], [  -50,150,  0], [  150,150,  0], [  -250,-50,  0], [  150,-150,  0], [  300,-200,  0], [  100,  0,  0], [  400,50,  0], [  -100,-200,  0], [  350,150,  0], [  -250,150,  0]];
//             0                      1                     2                     3                     4                   5                   6                     7                    8                     9                    10                     11
//           [ V, -350,-150,  0,0], [ U, 200,-150, 90,0], [ T,-350,-50,   0,0], [ F, -150,150,270,0], [ Z, -50,50,270,0], [ I, 450,50, 90,0], [ L, 400,-100, 90,0], [ Y, 200,200,180,0], [ P, -350,200,180,0], [ N, 200,100,  0,0], [ W, -150,-150,180,0], [ X, 50,-150,  0,0],
var solutions = [];
solutions[solutions.length] = [['V',-450,550,  0, 0],['U',850,-400,  0, 0],['T',550,550,  0, 0],['F',250,-550,  0, 0],['Z',-850,450,  0, 0],['I',-150,650,  0, 0],['L',700,-600,  0, 0],['Y',200,500,  0, 0],['P',850,400,  0, 0],['N',-600,-600,  0, 0],['W',-850,-350,  0, 0],['X',-150,-550,  0, 0]];
//6x10
solutions[solutions.length] = [['V', 350, 150,180, 0],['U',-350,-200,  0, 0],['T',-350, 150,270, 1],['F',-150,-50,270, 1],['Z',  50,-50,270, 0],['I',  50,-250,  0, 0],['L', 300,-100,180, 0],['Y',-200, 200,180, 1],['P', 250, 100,180, 1],['N', 300,-200,180, 1],['W',  50, 150, 90, 0],['X',-350, -50, 0, 0]];
solutions[solutions.length] = [['V',-350, 150,270, 0],['U', 350,-200,  0, 0],['T', 350, 150,270, 0],['F', -50,-50,270, 1],['Z', 150,-50,270, 0],['I', -50,-250,  0, 0],['L',-300,-100,180, 1],['Y', 200, 200,180, 0],['P',-250, 100,180, 0],['N',-300,-200,180, 0],['W', -50, 150,  0, 0],['X', 350, -50, 0, 0]];
solutions[solutions.length] = [['V',-350, 150,270, 0],['U',-350,-200,  0, 0],['T', -50,-150,270, 1],['F',-250,150,  0, 1],['Z', -50,150,270, 0],['I', 150,-250,180, 0],['L', 200, 100,  0, 0],['Y', 400, 100, 90, 0],['P', 250, 200,180, 0],['N', 100,-100,180, 1],['W', 350,-150,  0, 0],['X',-350, -50, 0, 0]];
solutions[solutions.length] = [['V',-350,-150,  0, 0],['U',-400, 150,270, 0],['T', -50, 150,  0, 0],['F', 150,150,270, 0],['Z',-250,-50,  0, 1],['I', 150,-150,  0, 0],['L', 300,-200,  0, 1],['Y', 100,   0,  0, 1],['P', 400,  50,270, 1],['N',-100,-200,  0, 1],['W', 350, 150, 90, 0],['X',-250, 150, 0, 0]];
solutions[solutions.length] = [["V",-350,-150,  0, 0],["U", 200,-150, 90, 0],["T",-350, -50,  0, 0],["F",-150,150,270, 0],["Z", -50, 50,270, 0],["I", 450,  50, 90, 0],["L", 400,-100, 90, 1],["Y", 200, 200,180, 0],["P",-350, 200,180, 0],["N", 200, 100,  0, 0],["W",-150,-150,180, 0],["X",  50,-150, 0, 0]];
//solutions[solutions.length] = [['V', -50,-150,270, 1],['U',-350,-200,  0, 0],['T',-350, 150,270, 1],['F', 350,150,270, 1],['Z',-150,-50,270, 1],['I', 150, 250,270, 0],['L', 200,-100,270, 0],['Y', 400,-100,270, 0],['P', 300,-150,270, 0],['N',-200, 200,270, 1],['W',  50,  50,270, 0],['X',-350, -50, 0, 0]];
solutions[solutions.length] = [['V', -50,-150,  0, 1],['U',-350,-200,  0, 0],['T',-350, 150,270, 1],['F', 350,150,  0, 1],['Z',-150,-50,270, 1],['I', 150, 250,  0, 0],['L', 200,-100,270, 0],['Y', 400,-100, 90, 0],['P', 300,-150,270, 0],['N',-200, 200,180, 1],['W',  50,  50, 90, 0],['X',-350, -50, 0, 0]];
//5x12
solutions[solutions.length] = [['V',-350, 150,270, 0],['U', 500, -50,270, 1],['T',-250,-50,180, 0],['F', 150,-50, 90, 1],['Z',  50,150,270, 0],['I',-550,  50,270, 0],['L', 400, 200,180, 0],['Y', 300, 100,180, 0],['P',-150,200,  0, 0],['N',-400,   0,270, 1],['W', -50, -50,180, 0],['X', 350, -50, 0, 0]];
//4x15
solutions[solutions.length] = [['V', 650, -50,180, 0],['U',   0, -50,270, 0],['T',-150, 50,  0, 0],['F',-250,-50, 90, 1],['Z', 550,-50,  0, 0],['I', 550, 150,  0, 0],['L',-600,   0, 90, 1],['Y', 400,-100,  0, 1],['P',-450,100,180, 1],['N', 200, 100,180, 1],['W',-450, -50,180, 0],['X', 150, -50, 0, 0]];

function showSolution(idx)
{
    NewGame(idx);
}

var dtFeature;
var dtLL;
var dtIDX=2;
var dtI=0;

function showAnimated(idx)
{
    dtI=0;
    dtIDX = idx;
    window.setTimeout("NewGame();",1);
    window.setTimeout("SchiebLos()", 1000);
}

function findPentomino(Was)
{
    var objFs = map.layers[6].features;
    for(var i=0;i<objFs.length;i++)
    {    if(objFs[i].attributes.name.substr(0,1)==Was)
             return(objFs[i]);
    }
    return(-1);
}

function Solution(idx)
{
    for(var i=0;i<12;i++)
    {
        var objF = map.layers[6].features[i];
        var ll = new OpenLayers.LonLat(solutions[idx][i][1],solutions[idx][i][2]);
        MoveFeature(objF, ll);
        if(solutions[idx][i][3]>0)
            RotateFeature(objF, solutions[idx][i][3]);
        if(solutions[idx][i][4]>0)
            MirrorFeature(objF,solutions[idx][i][4]);
    }
}

function MoveFeature(feature, ll)
{
    var objBounds = feature.geometry.getBounds();

    var x = (objBounds.left+objBounds.right )/2;
    var y = (objBounds.top +objBounds.bottom)/2;

    var dx = ll.lon - x;
    var dy = ll.lat - y;

    feature.geometry.move(dx, dy);
    feature.layer.drawFeature(feature);
}

function RotateFeature(feature, angle)
{
    feature.attributes.rotate = ((360-angle)%360)/90;

    var objBounds = feature.geometry.getBounds();

    var x = (objBounds.left+objBounds.right )/2;
    var y = (objBounds.top +objBounds.bottom)/2;

    var origin = {};

    origin.x = x;
    origin.y = y;

    feature.geometry.rotate(angle, origin);
    feature.layer.drawFeature(feature);
}

function MirrorFeature(feature,jmax)
{
    feature.attributes.mirror = jmax;

    var objFpt = feature.geometry.components[0].components;

    var objBounds = feature.geometry.getBounds();
    var ax = (objBounds.left+objBounds.right )/2;
    imax = objFpt.length-1

    for(var j=0;j<jmax;j++)
    {
        for(var i=0;i<imax;i++)
            objFpt[i].x = ax - (objFpt[i].x - ax);
        objFpt[imax].x = objFpt[0].x;
    }
    feature.layer.drawFeature(feature);
}