// MoveIt-Engine

function hilite(nr)     { var temp='bild_'+nr; document.images[temp].src=ima_a[f[nr]].src; }
function locken(nr)     { var temp='bild_'+nr; document.images[temp].src=ima_b[lock].src;  }
function normal(nr)     { var temp='bild_'+nr; document.images[temp].src=ima[f[nr]].src;   }
function weinglas(nr)   { var temp='bild_'+nr; document.images[temp].src=ima[14].src;   }
function showpunkte(nr) { document.anzeige.punkte.value=nr; }
function showlevel(nr)  { document.anzeige.levels.selectedIndex=nr; } 
function ladelevel()    { punkte=0; level=document.anzeige.levels.selectedIndex; initlevel(level); } 



function hilfe() { var win2=window.open("hilfe.htm","MoveIt_Hilfe","width=592,height=376,scrollbars=yes,resizable=yes"); }
function showhiscore()  { document.anzeige.modus.value=0; document.anzeige.submit(); }

function enderoutine()
{ document.anzeige.modus.value=1; document.anzeige.submit();
  punkte=0;  
}

// Tastaturauswertung
function abmarsch(cc)
{ // IE5: 2=98; 4=100; 6=102; 8=104; cs: 40,37,39,38  NS: 2=50; 4=52; 6=54; 8=56;
  cc=cc%48;  // IE auf NS-Patch und NumLock
  if ((cc==40) || (cc==2)) movecursor(2);
  if ((cc==37) || (cc==4)) movecursor(3);
  if ((cc==39) || (cc==6)) movecursor(1);
  if ((cc==38) || (cc==8)) movecursor(0);
  if ((cc==32) || (cc==5)) pickup(cursor);
}

// ----------------------------------------------------------------------------


function is_ende() { var rest=false; for (var i=0; i<zmax; i++) if ((f[i]>0) && (f[i]<9)) rest=true; return (!rest); }

function checkdrop()
{ var i,j,k;
  for (i=0; i<zmax; i++) if ((f[i]>0) && (f[i]<9))
  { var k=i+xmax; 
    if (k<zmax) 
    { if (f[k]==0) 
      { f[k]=f[i]; 
        f[i]=0; 
        normal(i);
        if (i==cursor) { cursor=k; locken(cursor); } else normal(k);
        timrec2=window.setTimeout("checkdrop()",50); 
      }
//      if (f[k]==12) { cursor=k; window.setTimeout(50,"tuere()"); }
//      if (f[k]>12)  { f[i]=0; normal(i); weinglas(k); }
    }
  }
  timrec2=window.setTimeout("checknachbarn()",50);
}


function drin(nr)
{ var ist_drin=false;
  if (liste[0]>0) for (var i=1; i<=liste[0]; i++) if (liste[i]==nr) ist_drin=true;
  return ist_drin;
}


function baue_liste(nr)
{ var i,k;
  k=f[nr];
  i=nr-xmax; if (i>=0)        { if ((f[i]==k) && (!drin(i))) { liste[0]++; liste[liste[0]]=i; baue_liste(i); } }
  i=nr+xmax; if (i<zmax)      { if ((f[i]==k) && (!drin(i))) { liste[0]++; liste[liste[0]]=i; baue_liste(i); } }
  i=nr+1; if (i%xmax>nr%xmax) { if ((f[i]==k) && (!drin(i))) { liste[0]++; liste[liste[0]]=i; baue_liste(i); } }
  i=nr-1; if (i%xmax<nr%xmax) { if ((f[i]==k) && (!drin(i))) { liste[0]++; liste[liste[0]]=i; baue_liste(i); } }
}
 
function checknachbarn()
{ var i,j,k;
  var entfernt=0;
  for (i=0; i<zmax; i++) if ((f[i]>0) && (f[i]<9))
  { liste[0]=1; 
    liste[1]=i; 
    baue_liste(i); 
    if (liste[0]>1)
    { for (j=1; j<=liste[0]; j++) 
      { f[liste[j]]=0; normal(liste[j]); 
        if (cursor==liste[j]) { lock=-1; hilite(cursor); } 
      }
      entfernt=entfernt+liste[0];  
    }
  }
  if (entfernt>0) 
  { if (is_ende()) 
    { anhalten(1);
      punkte=punkte+(level+1)*timer1;
      showpunkte(punkte);
      alert('Level geloest!'); 
      level++; 
      if (level>=maxlevel) enderoutine(); else initlevel(level);
    } else timrec2=window.setTimeout("checkdrop()",50); 
  }
}


function movelift()
{ var i,j,k,lcount,von,nach;
  for (i=1; i<=lifts[0]; i++) // Kugeln auf Lift lcount bestimmen:
  { k=lifts[i]; lcount=0; while((f[k-xmax]>0) && (f[k-xmax]<9)) { k=k-xmax; lcount++; } 


    if (liftri[i]>0) // abwaerts:

    { k=lifts[i]+xmax;
      if (f[k]==0) 
      { for (j=0; j<=lcount; j++) 
        { f[k]=f[k-xmax]; 
          if ((lock>0) && (cursor==(k-xmax))) { cursor=k; locken(cursor); } else { normal(k); if (lock<0) hilite(cursor); }
          k=k-xmax;
        }
        f[k]=0; normal(k); if (lock<0) hilite(cursor);
        checknachbarn();
        lifts[i]=lifts[i]+xmax; 
      } else { liftri[i]=0; window.setTimeout("movelift()",250); }
    }
    else // aufwaerts:
    { k=lifts[i]-xmax-lcount*xmax;
      if (f[k]==0) 
      { for (j=0; j<=lcount; j++) 
        { f[k]=f[k+xmax]; 
          if ((lock>0) && (cursor==(k+xmax))) { cursor=k; locken(cursor); } else { normal(k); if (lock<0) hilite(cursor); }
          k=k+xmax;
        }
        f[k]=0; normal(k); 
        checknachbarn();
        f[lifts[i]]=0; normal(lifts[i]); 
        if (lock<0) hilite(cursor);
        lifts[i]=lifts[i]-xmax; 
      } else { liftri[i]=1; window.setTimeout("movelift()",250); }
    }
  }
} 

function movecursor(ri)
{ var ziel; 
  if (ri==0) { ziel=cursor-xmax; if (ziel<0) ziel=cursor; }
  else if (ri==1) { ziel=cursor+1; if (ziel%xmax<cursor%xmax) ziel=cursor; }
  else if (ri==2) { ziel=cursor+xmax; if (ziel>zmax) ziel=cursor; }
  else if (ri==3) { ziel=cursor-1; if (ziel%xmax>cursor%xmax) ziel=cursor; }
  if (lock<0) 
  { normal(cursor);
    cursor=ziel;
    hilite(cursor);
  }
  else if (ri%2>0)
  { if (f[ziel]==0)  { f[cursor]=0; f[ziel]=lock; normal(cursor); cursor=ziel; locken(cursor); checkdrop(); }
//  if (f[ziel]==12) { f[cursor]=0; normal(cursor); cursor=ziel; tuere(); locken(cursor); checkdrop(); }
//  if (f[ziel]>12) { f[cursor]=0; normal(cursor); weinglas(ziel); lock=-1; hilite(cursor); }
  }
}


function klick(nr) 
{ if (aktiv) { normal(cursor); cursor=nr; if ((f[cursor]>0) && (f[cursor]<9)) { lock=-1; pickup(); } else hilite(cursor); }}

function pickup() 
{ if (lock<0) { if ((f[cursor]>0) && (f[cursor]<9)) { lock=f[cursor]; locken(cursor); } }
  else { lock=-1; hilite(cursor); }
}

function tabelle()
{ var i,j,k,t2;
  var temp='<table border=0 cellpadding=0 cellspacing=0 align=left>';
  k=0;
  for (j=0; j<ymax; j++)
  { temp=temp+'<tr>';
    for (i=0; i<xmax; i++) 
    { temp=temp+'<td><a href="javascript:klick('+k+')"><img src="leer.gif" width=24 height=24 alt="" name="bild_'+k+'" border=0></td>';
      k++;
    }
    temp=temp+'</tr>'; 
  }
  temp=temp+'</table>';
  document.writeln(temp);
}

function neu() { punkte=0; level=0; initlevel(level); cursor=(zmax-xmax)/2;  hilite(cursor); }  

function countdown()
{ if (aktiv) 
  { document.anzeige.restzeit.value=timer1;
    timer1=timer1-1; 
    movelift();
    if (timer1<0) { alert('Game Over!'); anhalten(); enderoutine(); } 
  }
}



function starten() { timrec1=window.setInterval("countdown()",1000); aktiv=true; }
function anhalten() { window.clearInterval(timrec1); aktiv=false; }


