function anzeigen(nr)        { document.nextstein.src=ima[chip[nr].bild].src; }
function zeige_stein(nr,x,y) { document.images['c'+(y*xmax+x)].src=ima[chip[nr].bild].src; }
function loesche_stein(x,y)  { var k=x+y*xmax; document.images['c'+k].src='leer.gif'; }
function zeige_punkte()      { document.anzeige.punkte.value=punkte; }
function zeige_feld(x,y)     { var k=x+xmax*y; document.images['c'+k].src=ima[chip[f[k]].bild].src; }
function hilite(nr) { document.images['c'+nr].src=ima_a[chip[f[nr]].bild].src; }
function starten()  { timrec1=window.setInterval("drop()",speed); aktiv=true; }
function anhalten() { window.clearInterval(timrec1); aktiv=false; }



function toggle_pause()
{ if (aktiv) { anhalten(); document.pause.src="pause.gif"; } else { starten();  document.pause.src="leer.gif"; }
}

function neuer_stein()
{ if (naechster<1) naechster=Math.floor((cmax-3)*Math.random());
  aktuell=naechster; y=0; x=Math.floor(xmax*Math.random()); naechster=Math.floor((cmax-3)*Math.random())+1; 
  anzeigen(naechster); 
  zeige_stein(aktuell,x,y);
  if (f[x]>0) enderoutine(x);
  else if (c_count>2*zmax) enderoutine(-1);
  else
  { punkte=punkte+5; speed=speed-5; 
    if (speed<100) speed=100; 
    zeige_punkte(); 
    c_count++;
    starten();
  }
} 

function enderoutine(x)
{ ende=true;
  anhalten();
  if (x<0)
  { punkte=punkte+punkte;
    alert('Alle Schienen durch! Doppelte Punktzahl!');
    zeige_punkte();
  }
  else
  { f[x]=8; zeige_feld(x,0);  
    alert('Spiel ENDE!');
  }
  var temp='p'+punkte; punkte=0;

}

function drehen()   { aktuell=chip[aktuell].dreh; zeige_stein(aktuell,x,y); }
function spiegeln() { aktuell=chip[aktuell].flip; zeige_stein(aktuell,x,y); }
function rechts()   { if (x<(xmax-1)) if (f[x+y*xmax+1]==0) { loesche_stein(x,y); x=x+1; zeige_stein(aktuell,x,y); } }
function links()    { if (x>0) if (f[x+y*xmax-1]==0) { loesche_stein(x,y); x=x-1; zeige_stein(aktuell,x,y); } }

function drop()     
{ if ((y<(ymax-1)) && (f[x+y*xmax+xmax]==0)) 
  { loesche_stein(x,y); y=y+1; zeige_stein(aktuell,x,y); } 
  else 
  { anhalten(); f[x+y*xmax]=aktuell; auswerten(); }
}


function fastdrop()     
{ anhalten();
  if ((y<(ymax-1)) && (f[x+y*xmax+xmax]==0)) 
  { loesche_stein(x,y); y=y+1; zeige_stein(aktuell,x,y); window.setTimeout("fastdrop()",10); } 
  else 
  { f[x+y*xmax]=aktuell; auswerten(); }
}

function neu()
{ var i,j,k;
  if (aktiv) anhalten(); 
  for (i=0; i<zmax; i++) { f[i]=0; document.images['c'+i].src='leer.gif'; }
  speed=speed0;
  ende=false;
  c_count=0;
  neuer_stein();
  punkte=0;
  zeige_punkte();
}



function in_liste(nr)  { var k=false; if (liste[0]>0) for (var i=1; i<=liste[0]; i++) if (nr==liste[i]) k=true; return k; }
function add_liste(nr) { liste[0]++; liste[liste[0]]=nr; }

function kette(nr,ri)
{ var ok;
  if ((nr>=0) && (nr<zmax))
{ if (!in_liste(nr))
  { add_liste(nr);
    if (chip[f0[nr]].code==3)
    { if (ri==4) { z=nr+1; if (z%xmax>0) kette(z,2); }
      else if (ri==8) { z=nr-xmax; if (z>=0) kette(z,1); }
    }
    else if (chip[f0[nr]].code==5)
    { if (ri==1) { z=nr-xmax; if (z>=0) kette(z,1); }
      else if (ri==4) { z=nr+xmax; if (z<zmax) kette(z,4); }
    }
    else if (chip[f0[nr]].code==6)
    { if (ri==1) { z=nr+1; if (z%xmax>0) kette(z,2); }
      else if (ri==8) { z=nr+xmax; if (z<zmax) kette(z,4); }
    }
    else if (chip[f0[nr]].code==9)
    { if (ri==2) { z=nr-xmax; if (z>=0) kette(z,1); }
      else if (ri==4) { z=nr-1; if (z%xmax<(xmax-1)) kette(z,8); }
    }
    else if (chip[f0[nr]].code==10)
    { if (ri==2) { z=nr+1; if (z%xmax>0) kette(z,2); }
      else if (ri==8) { z=nr-1; if (z%xmax<(xmax-1)) kette(z,8); }
    }
    else if (chip[f0[nr]].code==12)
    { if (ri==1) { z=nr-1; if (z%xmax<(xmax-1)) kette(z,8); }
      else if (ri==2) { z=nr+xmax; if (z<zmax) kette(z,4); }
    }
  }
  else 
  { if (ri==1) ok=((chip[f0[nr]].code%8)>3);
    else if (ri==2) ok=((chip[f0[nr]].code%16)>7);
    else if (ri==4) ok=((chip[f0[nr]].code%2)>0);
    else if (ri==8) ok=((chip[f0[nr]].code%4)>1);
    if (ok)
    { punkte=punkte+(liste[0]-3)*(liste[0]-3); 
      zeige_punkte();
      for (i=1; i<=liste[0]; i++) { hilite(liste[i]); f[liste[i]]=geloescht; f0[liste[i]]=geloescht; }
    }
  }
}
}

function blancs_weg()
{ var i,j,k,l,flag=false;
  for (i=0; i<xmax; i++) for (j=ymax-1; j>=0; j--)
  { k=j*xmax+i; 
    if (f[k]==geloescht) 
    { flag=true;
      for (l=j; l>0; l--) { f[l*xmax+i]=f[l*xmax+i-xmax]; }
      f[i]=0; 
    }  
  }
  for (var i=0; i<xmax; i++) for (var j=0; j<ymax; j++) zeige_feld(i,j); 
  if (flag) auswerten(); else neuer_stein(); 
}


function auswerten()
{ anhalten();
  var i,k,ri;
  for (i=0; i<zmax; i++) f0[i]=f[i];
  for (i=0; i<zmax; i++) if (f0[i]>0)
  { liste[0]=0;
    if (chip[f0[i]].code==3) ri=4;
    else if (chip[f0[i]].code==5) ri=4;   
    else if (chip[f0[i]].code==6) ri=1;
    else if (chip[f0[i]].code==9) ri=4;
    else if (chip[f0[i]].code==10) ri=2;   
    else if (chip[f0[i]].code==12) ri=2;
    kette(i,ri);   
  }
  window.setTimeout("blancs_weg()",50);
}



// Tastaturauswertung
function abmarsch()
{ // IE5: 2=98; 4=100; 6=102; 8=104; cs: 40,37,39,38  NS: 2=50; 4=52; 6=54; 8=56;
 code=code%48;  // IE auf NS-Patch und NumLock
 if ((code==40) || (code==2)) fastdrop();
 if ((code==37) || (code==4)) links();
 if ((code==39) || (code==6)) rechts();
 if ((code==38) || (code==8)) drehen();
 if ((code==32) || (code==5)) spiegeln();
}

