// ----- MahJongg-Levels:

xmax=36; ymax=24; zmax=8; 
dx=16; dy=16; dzx=4; dzy=4; xoff=32; yoff=80; cmax=144; fmax=36;
var i,j,k,l; 
var stein=new Array(144);

function gen_stein(x,y,z,id)
{ this.x=x; this.y=y; this.z=z; this.id=id; this.prio=x+y*xmax+z*xmax*ymax;
  this.ix=x*(dx-1)+xoff-z*dzx; this.iy=y*(dy-1)+yoff-z*dzy;
  this.ist_da=true;
  this.bild=id;
}

function get_level(nr)
{ var i,j,k,l;
  if (nr==0) // --- Drache: 
  { k=0; l=1; 
    for (i=1; i<=12; i++) { stein[k]=new gen_stein(2*i,0,l,k%fmax); k++; stein[k]=new gen_stein(2*i,14,l,k%fmax); k++; }
    for (i=3; i<=10; i++) { stein[k]=new gen_stein(2*i,2,l,k%fmax); k++; stein[k]=new gen_stein(2*i,12,l,k%fmax); k++; }
    for (i=2; i<=11; i++) { stein[k]=new gen_stein(2*i,4,l,k%fmax); k++; stein[k]=new gen_stein(2*i,10,l,k%fmax); k++; }
    for (i=1; i<=12; i++) { stein[k]=new gen_stein(2*i,6,l,k%fmax); k++; stein[k]=new gen_stein(2*i,8,l,k%fmax); k++; }
    stein[k]=new gen_stein(0,7,l,k%fmax); k++; 
    stein[k]=new gen_stein(26,7,l,k%fmax); k++; stein[k]=new gen_stein(28,7,l,k%fmax); k++;
    l=2; for (j=1; j<=6; j++) for (i=1; i<=6; i++)  { stein[k]=new gen_stein(2*i+6,2*j,l,k%fmax); k++; }
    l=3; for (j=2; j<=5; j++) for (i=2; i<=5; i++)  { stein[k]=new gen_stein(2*i+6,2*j,l,k%fmax); k++; }
    l=4; for (j=3; j<=4; j++) for (i=3; i<=4; i++)  { stein[k]=new gen_stein(2*i+6,2*j,l,k%fmax); k++; }
    l=5;  stein[k]=new gen_stein(13,7,l,k%fmax); k++; 
    stein[84].prio=1; stein[85].prio=stein[83].prio+1; stein[86].prio=stein[83].prio+2;
  }
  else if (nr==1) // --- Bruecke:
  { k=0; l=1;
    for (i=3; i<6; i++)  
    { stein[k]=new gen_stein(2*i,0,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i,12,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+18,0,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+18,12,l,k%fmax); k++; 
    }
    for (i=2; i<6; i++)  
    { stein[k]=new gen_stein(2*i+1,2,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+1,10,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+19,2,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+19,10,l,k%fmax); k++; 
    }
    for (j=2; j<5; j++)
    { stein[k]=new gen_stein(0,2*j,l,k%fmax); k++; 
      for (i=2; i<7; i++)  
      { stein[k]=new gen_stein(2*i,2*j,l,k%fmax); k++; 
        stein[k]=new gen_stein(2*i+18,2*j,l,k%fmax); k++; 
      }
      stein[k]=new gen_stein(34,2*j,l,k%fmax); k++; 
    }
    l=2;
    stein[k]=new gen_stein(0,4,l,k%fmax); k++; 
    stein[k]=new gen_stein(0,8,l,k%fmax); k++; 

    for (i=3; i<6; i++)
    { stein[k]=new gen_stein(2*i,4,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+18,4,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i,8,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+18,8,l,k%fmax); k++; 
    }
    for (i=0; i<7; i++)
    { stein[k]=new gen_stein(2*i+1,6,l,k%fmax); k++; 
      stein[k]=new gen_stein(2*i+21,6,l,k%fmax); k++; 
    }
    stein[k]=new gen_stein(34,4,l,k%fmax); k++; 
    stein[k]=new gen_stein(34,8,l,k%fmax); k++; 

    for (l=3; l<7; l++)
    { if (l==3) 
      { stein[k]=new gen_stein(12,6,l,k%fmax); k++; 
        stein[k]=new gen_stein(14,6,l,k%fmax); k++; 
        stein[k]=new gen_stein(20,6,l,k%fmax); k++; 
        stein[k]=new gen_stein(22,6,l,k%fmax); k++; 
      }
      else if (l==4)
      { stein[k]=new gen_stein(15,6,l,k%fmax); k++; 
        stein[k]=new gen_stein(19,6,l,k%fmax); k++; 
      }
      else if (l==5)
      { stein[k]=new gen_stein(16,6,l,k%fmax); k++; 
        stein[k]=new gen_stein(18,6,l,k%fmax); k++; 
      }
      stein[k]=new gen_stein( 6,4,l,k%fmax); k++;  
      stein[k]=new gen_stein(10,4,l,k%fmax); k++;  
      stein[k]=new gen_stein(24,4,l,k%fmax); k++;  
      stein[k]=new gen_stein(28,4,l,k%fmax); k++;  
      stein[k]=new gen_stein( 6,8,l,k%fmax); k++;  
      stein[k]=new gen_stein(10,8,l,k%fmax); k++;  
      stein[k]=new gen_stein(24,8,l,k%fmax); k++;  
      stein[k]=new gen_stein(28,8,l,k%fmax); k++;  
    }
    l=7;
    stein[k]=new gen_stein( 7,5,l,k%fmax); k++;  
    stein[k]=new gen_stein( 9,5,l,k%fmax); k++;  
    stein[k]=new gen_stein(25,5,l,k%fmax); k++;  
    stein[k]=new gen_stein(27,5,l,k%fmax); k++;  
    stein[k]=new gen_stein( 7,7,l,k%fmax); k++;  
    stein[k]=new gen_stein( 9,7,l,k%fmax); k++;  
    stein[k]=new gen_stein(25,7,l,k%fmax); k++;  
    stein[k]=new gen_stein(27,7,l,k%fmax); k++;  
    l=8;
    stein[k]=new gen_stein( 8,6,l,k%fmax); k++;  
    stein[k]=new gen_stein(26,6,l,k%fmax); k++;  
  }
  else if (nr==2) // --- Burg:
  { k=0; for (l=1; l<=2; l++)
    { for (i=0; i<3; i++)
      { stein[k]=new gen_stein(i*2,0,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2+20,0,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2,4,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2+20,4,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2,10,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2+20,10,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2,14,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*2+20,14,l,k%fmax); k++;  
      }
      for (i=0; i<7; i++)
      { stein[k]=new gen_stein(i*4,2,l,k%fmax); k++;  
        stein[k]=new gen_stein(i*4,12,l,k%fmax); k++;  
      }
      stein[k]=new gen_stein(2,7,l,k%fmax); k++;  
      stein[k]=new gen_stein(22,7,l,k%fmax); k++;  
    }
    l=3;
    for (i=0; i<8; i++)
    { stein[k]=new gen_stein(i*2+5,2,l,k%fmax); k++;  
      stein[k]=new gen_stein(i*2+5,12,l,k%fmax); k++;  
    }
    for (i=0; i<3; i++)
    { stein[k]=new gen_stein(2,i*2+5,l,k%fmax); k++;  
      stein[k]=new gen_stein(22,i*2+5,l,k%fmax); k++;  
    }
    for (j=0; j<2; j++) for (i=0; i<2; i++)
    { stein[k]=new gen_stein(i*4,j*4,l,k%fmax); k++;  
      stein[k]=new gen_stein(24-i*4,j*4,l,k%fmax); k++;  
      stein[k]=new gen_stein(i*4,j*4+10,l,k%fmax); k++;  
      stein[k]=new gen_stein(24-i*4,j*4+10,l,k%fmax); k++;  
    }
    l=4;
    for (j=0; j<2; j++) 
    { for (i=0; i<4; i++) { stein[k]=new gen_stein(i*4+6,j*10+2,l,k%fmax); k++; }
      stein[k]=new gen_stein(2,j*2+6,l,k%fmax); k++;  
      stein[k]=new gen_stein(22,j*2+6,l,k%fmax); k++;  
    }
    l=5;
    for (j=0; j<2; j++) 
    { for (i=0; i<6; i++) { stein[k]=new gen_stein(i*2+7,j*10+2,l,k%fmax); k++; }
      stein[k]=new gen_stein(j*20+2,7,l,k%fmax); k++;    
    }
    stein[104].prio=stein[100].prio-1; 
    stein[109].prio=stein[101].prio-1; 
    stein[111].prio=stein[97].prio+1; 
    stein[114].prio=stein[96].prio+1; 
  }
  else if (nr==3) // --- Tempel:
  { l=1; k=0;
    for (j=0; j<6; j++) for (i=0; i<7; i++)
    { if ((i==6) && ((j==1) || (j==4)))
      { stein[k]=new gen_stein(i*2+2,j*2,l,k%fmax); k++;   
        stein[k]=new gen_stein(28-i*2,j*2,l,k%fmax); k++;   
      }
      else
      { stein[k]=new gen_stein(i*2,j*2,l,k%fmax); k++;   
        stein[k]=new gen_stein(30-i*2,j*2,l,k%fmax); k++;   
      }
    }
    stein[k]=new gen_stein(15,5,l,k%fmax); k++;   
    for (l=2; l<4; l++) for (j=0; j<2; j++) for (i=0; i<2; i++)
    { stein[k]=new gen_stein(i*6+2,j*6+2,l,k%fmax); k++;   
      stein[k]=new gen_stein(28-i*6,j*6+2,l,k%fmax); k++;   
    }
    l=2; stein[k]=new gen_stein(15,5,l,k%fmax); k++;   
    l=4;
    for (j=0; j<4; j++) for (i=0; i<4; i++)
    { stein[k]=new gen_stein(i*2+2,j*2+2,l,k%fmax); k++;   
      stein[k]=new gen_stein(28-i*2,j*2+2,l,k%fmax); k++;   
    }
    l=5;
    for (j=0; j<2; j++) for (i=0; i<2; i++)
    { stein[k]=new gen_stein(i*2+4,j*2+4,l,k%fmax); k++;   
      stein[k]=new gen_stein(26-i*2,j*2+4,l,k%fmax); k++;   
    }
    l=6;
    stein[k]=new gen_stein(5,5,l,k%fmax); k++;   
    stein[k]=new gen_stein(25,5,l,k%fmax); k++;   
  }
  else if (nr==4) // --- Pyramiden:
  { k=0; l=1;
    for (j=0; j<2; j++) for (i=0; i<5; i++) { stein[k]=new gen_stein(2*i,2*j,l,k%fmax); k++; }  
    for (i=0; i<5; i++) { stein[k]=new gen_stein(2*i+18,18,l,k%fmax); k++; }  
    for (j=2; j<5; j++) for (i=0; i<10; i++) { stein[k]=new gen_stein(2*i,2*j,l,k%fmax); k++; }  
    for (j=5; j<9; j++) for (i=3; i<14; i++) { stein[k]=new gen_stein(2*i,2*j,l,k%fmax); k++; }  
    l=2;
    for (j=0; j<3; j++) for (i=0; i<3; i++)
    { stein[k]=new gen_stein(2*i+2,2*j+2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+20,2*j+12,l,k%fmax); k++;
    }  
    for (j=0; j<5; j++) for (i=0; i<5; i++) { stein[k]=new gen_stein(2*i+8,2*j+6,l,k%fmax); k++; }  
    l=3;
    for (j=0; j<3; j++) for (i=0; i<3; i++) { stein[k]=new gen_stein(2*i+10,2*j+8,l,k%fmax); k++; }  
    stein[k]=new gen_stein(4,4,l,k%fmax); k++;
    stein[k]=new gen_stein(22,14,l,k%fmax); k++;
    l=4;
    stein[k]=new gen_stein(12,10,l,k%fmax); k++;
  }
  else if (nr==5) // --- harte Nuss:
  { k=0; l=1;
    for (j=0; j<9; j++) for (i=0; i<10-j; i++) { stein[k]=new gen_stein(2*i+j,j*2,l,k%fmax); k++; }
    for (j=0; j<3; j++) for (i=0; i<5-j; i++)  { stein[k]=new gen_stein(2*i+j+5,j*2+18,l,k%fmax); k++; }
    l=2;
    for (j=0; j<8; j++) for (i=0; i<8-j; i++) { stein[k]=new gen_stein(2*i+j+2,j*2+1,l,k%fmax); k++; }
    for (j=0; j<2; j++) for (i=0; i<3-j; i++)  { stein[k]=new gen_stein(2*i+j+7,j*2+19,l,k%fmax); k++; }
    l=3;
    for (j=0; j<6; j++) for (i=0; i<6-j; i++) { stein[k]=new gen_stein(2*i+j+4,j*2+2,l,k%fmax); k++; }
    stein[k]=new gen_stein(9,20,l,k%fmax); k++; 
    l=4;
    for (j=0; j<4; j++) for (i=0; i<4-j; i++) { stein[k]=new gen_stein(2*i+j+6,j*2+3,l,k%fmax); k++; }
    stein[k]=new gen_stein(9,20,l,k%fmax); k++; 
    l=5;
    for (j=0; j<2; j++) for (i=0; i<2-j; i++) { stein[k]=new gen_stein(2*i+j+8,j*2+4,l,k%fmax); k++; }
    stein[k]=new gen_stein(9,20,l,k%fmax); k++; 

  } 
  else if (nr==6) // --- Arena
  { k=0; l=1;
    j=1; for (i=0; i<9; i++) { stein[k]=new gen_stein(2*i+5,j*2,l,k%fmax); k++; }
    j=2; for (i=0; i<10; i++) { stein[k]=new gen_stein(2*i+4,j*2,l,k%fmax); k++; }
    j=3;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+3,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+21,j*2,l,k%fmax); k++;
    }
    j=4;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+2,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+22,j*2,l,k%fmax); k++;
    }
    j=5;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+1,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+23,j*2,l,k%fmax); k++;
    }
    j=6;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+1,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+23,j*2,l,k%fmax); k++;
    }
    j=7;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+2,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+22,j*2,l,k%fmax); k++;
    }
    j=8;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+3,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+21,j*2,l,k%fmax); k++;
    }
    j=9;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+4,j*2,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+20,j*2,l,k%fmax); k++;
    }
// -------- Ebene 2
    l=2;
    j=0; for (i=0; i<10; i++) { stein[k]=new gen_stein(2*i+4,j*2+1,l,k%fmax); k++; }
    j=1; for (i=0; i<11; i++) { stein[k]=new gen_stein(2*i+3,j*2+1,l,k%fmax); k++; }
    j=2;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+2,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+22,j*2+1,l,k%fmax); k++;
    }
    j=3;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+1,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+23,j*2+1,l,k%fmax); k++;
    }
    j=4;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+0,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+24,j*2+1,l,k%fmax); k++;
    }

    j=5;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+0,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+24,j*2+1,l,k%fmax); k++;
    }

    j=6;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+0,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+24,j*2+1,l,k%fmax); k++;
    }
    j=7;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+1,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+23,j*2+1,l,k%fmax); k++;
    }
    j=8;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+2,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+22,j*2+1,l,k%fmax); k++;
    }
    j=9;
    for (i=0; i<2; i++) 
    { stein[k]=new gen_stein(2*i+4,j*2+1,l,k%fmax); k++;
      stein[k]=new gen_stein(2*i+20,j*2+1,l,k%fmax); k++;
    }
    // --- Tor:
    j=19;
    stein[k]=new gen_stein(10,j,1,k%fmax); k++;    
    stein[k]=new gen_stein(10,j,2,k%fmax); k++;
    stein[k]=new gen_stein(16,j,1,k%fmax); k++;
    stein[k]=new gen_stein(16,j,2,k%fmax); k++;
    l=3;
    stein[k]=new gen_stein(9,j,l,k%fmax); k++;
    stein[k]=new gen_stein(11,j,l,k%fmax); k++;
    stein[k]=new gen_stein(15,j,l,k%fmax); k++;
    stein[k]=new gen_stein(17,j,l,k%fmax); k++;    
    stein[k]=new gen_stein(12,j,l+1,k%fmax); k++;
    stein[k]=new gen_stein(14,j,l+1,k%fmax); k++;
    stein[k]=new gen_stein(13,j,l+2,k%fmax); k++;
    stein[k]=new gen_stein(13,j,l+3,k%fmax); k++;

    // --- Flutlichter:
    for (l=3; l<6; l++)
    { stein[k]=new gen_stein(7,1,l,k%fmax); k++;
      stein[k]=new gen_stein(19,1,l,k%fmax); k++;
      stein[k]=new gen_stein(7,19,l,k%fmax); k++;
      stein[k]=new gen_stein(19,19,l,k%fmax); k++;
      stein[k]=new gen_stein(0,11,l,k%fmax); k++;
      stein[k]=new gen_stein(26,11,l,k%fmax); k++;
    }
    l=6;
    stein[k]=new gen_stein(6,1,l,k%fmax); k++;
    stein[k]=new gen_stein(8,1,l,k%fmax); k++;
    stein[k]=new gen_stein(18,1,l,k%fmax); k++;
    stein[k]=new gen_stein(20,1,l,k%fmax); k++;
    stein[k]=new gen_stein(6,19,l,k%fmax); k++;
    stein[k]=new gen_stein(8,19,l,k%fmax); k++;
    stein[k]=new gen_stein(18,19,l,k%fmax); k++;
    stein[k]=new gen_stein(20,19,l,k%fmax); k++;

    stein[k]=new gen_stein(0,10,l,k%fmax); k++;
    stein[k]=new gen_stein(0,12,l,k%fmax); k++;
    stein[k]=new gen_stein(26,10,l,k%fmax); k++;
    stein[k]=new gen_stein(26,12,l,k%fmax); k++;

    l=7;
    stein[k]=new gen_stein(12,19,l,k%fmax); k++;
    stein[k]=new gen_stein(14,19,l,k%fmax); k++;


  }
  else alert('hamma noch nich!');
//  sort_prio()
  if (k!=cmax) alert('Falsche Steinzahl!');
  var kx1=-1,kx2,ky1,ky2,kz1,kz2,k1,k2;
  k=0; for (i=0; i<cmax-1; i++) for (j=i+1; j<cmax; j++)
  if (Math.abs(stein[i].x-stein[j].x)<2) if (Math.abs(stein[i].y-stein[j].y)<2) if (stein[i].z==stein[j].z)
  { k1=i; k2=j;
    kx1=stein[i].x; ky1=stein[i].y; kx2=stein[j].x; ky2=stein[j].y;  kz1=stein[i].z; kz2=stein[j].z;
  }
  if (kx1>=0) alert('Koordinaten doppelt: Steine '+k1+' und '+k2);
}



function sort_prio()   // shelsort auf z,y,x:
{ var ind=new Array(cmax); var term1,term2;
  for (i=0; i<cmax; i++) ind[i]=i;
  var getauscht,delta;
  delta=Math.floor(cmax/2);
  while (delta>0) 
  { getauscht=false;
    for (i=0; i<(cmax-delta); i++) 
    { term1=stein[ind[i]].z*ymax*xmax+stein[ind[i]].y*xmax+stein[ind[i]].x;
      term2=stein[ind[i+delta]].z*ymax*xmax+stein[ind[i+delta]].y*xmax+stein[ind[i+delta]].x;
      if (term1>term2) 
      { k=ind[i];               
        ind[i]=ind[i+delta];
        ind[i+delta]=k;
        getauscht=true;
      }
    }
    if (!getauscht) delta=Math.floor(delta/2);
  }
  for (i=0; i<cmax; i++) stein[i].prio=ind[i];
}

// ---------------------------------------------------------------------------------------------------------------






