var hoogte=30;
var breedte=40;
var beginLengte=8;
var tijdsEenheid;
var beginTijdsEenheid=50;
var aantalBlokjes=hoogte*breedte;
var slangPosities=[];
var positie;
var items=[];
var lengte;
var richting;
var oudeRichting;
var groei;
var veld;
var dood=true;
var statusLeegmaking;
var spelen;
var score;
var topscore=0;

items.push({
 actie:function() {
  score+=10;
  updateScore();
  veranderStatus("+10 punten",false,1000);
  groei+=5;
  nieuwItem(0);
 },
 plekken:[],
 klasseNaam:"appel"
});

probeerTeBewegen=function() {
 oudeRichting=richting;
 switch(richting) {
  case 0:
   positie++;
   if(positie%breedte==0)
    positie-=breedte;
   break;
  case 1:
   positie-=breedte;
   if(positie < 0)
    positie+=aantalBlokjes;
   break;
  case 2:
   if(positie%breedte==0)
    positie+=breedte;
   positie--;
   break;
  case 3:
   positie+=breedte;
   if(positie>=aantalBlokjes)
    positie-=aantalBlokjes;
 }
 if(veld[positie]>1) {
  var w=veld[positie]-2;
  items[w].actie();
  for(var i=0,j=items[w].plekken.length;i<j;i++)
   if(positie==items[w].plekken[i])
    items[w].plekken.splice(i,1);
 }
 if(veld[positie]!=1) {
  document.getElementById("b"+positie).className="slang";
  veld[positie]=1;
  slangPosities.push(positie);
  if(!groei) {
   var oudePositie=slangPosities.shift();
   document.getElementById("b"+oudePositie).className="";
   veld[oudePositie]=0;
  }
  else
   groei--;
 }
 else {
  dood=true;
  veranderStatus("Dood.");
  clearInterval(spelen);
  setTimeout(nieuwSpel,2000);
 }
};
updateScore=function() {
 if(score > topscore)
  topscore=score;
 document.getElementById("score").innerHTML="score: "+score+" / top: "+topscore;
};
nieuwItem=function(itemType) {
 var i;
 while(veld[(i=Math.floor(Math.random()*aantalBlokjes))]!=0);
 document.getElementById("b"+i).className=items[itemType].klasseNaam;
 items[itemType].plekken.push(i);
 veld[i]=itemType+2;
};
nieuwSpel=function() {
 tijdsEenheid=beginTijdsEenheid;
 veld=[];
 score=0;
 updateScore();
 for(var i=0,p=hoogte*breedte;i<p;i++)
  veld.push(0);
 for(var i=0,j=slangPosities.length;i<j;i++)
  document.getElementById("b"+slangPosities[i]).className="";
 for(var i=0,j=items.length;i<j;i++) {
  for(var k=0,l=items[i].plekken.length;k<l;k++)
   document.getElementById("b"+items[i].plekken[k]).className="";
  items[i].plekken=[];
 }
 richting=0;
 oudeRichting=0;
 groei=0;
 lengte=beginLengte;
 if(lengte > breedte-1)
  lengte=breedte-1;
 slangPosities=[];
 var x=breedte*Math.floor(Math.random()*hoogte);
 for(var i=x;i<x+lengte;i++) {
  positie=i;
  slangPosities.push(positie);
  veld[positie]=1;
  document.getElementById("b"+positie).className="slang";
 }
 dood=false;
 nieuwItem(0);
 spelen=setInterval(function() {
  probeerTeBewegen();
 },tijdsEenheid);
};
document.onkeydown=function(e) {
 if(!e)
  e=window.event;
 var k=e.keyCode;
 if(37>k || 40<k)
  return;
 k=(43-k)%4;
 if((oudeRichting-k+4)%4!=2)
  richting=k;
 return false;
};
veranderStatus=function(tekst,permanent,tijd) {
 if(tekst=="") {
  permanent=true;
  tekst=" ";
 }
 clearTimeout(statusLeegmaking);
 statusDingEl.innerHTML=tekst;
 if(!permanent)
  statusLeegmaking=setTimeout(function() {
   veranderStatus("");
  },(tijd!=undefined?tijd:2000));
};
initialiseer=function() {
 var b=breedte*10;
 var veldOmhulselEl=document.getElementById("veldomhulsel");
 veldOmhulselEl.style.width=b+"px";
 var t='<table id="veld" cellspacing="0">';
 for(var i=0;i<hoogte;i++) {
  t+="<tr>";
  for(var j=0;j<breedte;j++)
   t+='<td id="b'+(i*breedte+j)+'">';
 }
 t+="</table>";
 veldOmhulselEl.innerHTML+=t;
 veldOmhulselEl.innerHTML+='<div id="statusding"></div>';
 statusDingEl=document.getElementById("statusding");
 statusDingEl.style.width=b+"px";
 veldOmhulselEl.appendChild(statusDingEl);
 
 veranderStatus("Klik om te starten.",true);
 
 document.onmousedown=function() {
  nieuwSpel();
  veranderStatus("");
  document.onmousedown=function() {};
 };
};

executeOnLoad(initialiseer);

