function copyright() {
 return "life.js v1.1 (c) 2009, Alexander A. Shabarshin [ashabarshin@gmail.com]";
 // 2009-01-24 (v1.1) working table identified by width and height
 // 2009-01-24 (v1.0) initial version with one table per page
}

function create_name(height,width,row,col) {
 return height + "_" + width + "_" + row + "_" + col;
}

function neighbour(height,width,row,col,val) {
 if(row>=0 && row<height && col>=0 && col<width) {
  var el = document.getElementById(create_name(height,width,row,col));
  var nei = parseInt(el.innerHTML);
  nei = nei + val;
  el.innerHTML = nei;
 }
}

function neighbours(height,width,row,col,val) {
 var i,j;
 for(j=-1;j<=1;j++) {
 for(i=-1;i<=1;i++) {
   if(i!=0 || j!=0) {
     neighbour(height,width,row+j,col+i,val);
   }
 }}
}

function setcolor(height,width,row,col) {
 if(row>=0 && row<height && col>=0 && col<width) {
  var el = document.getElementById(create_name(height,width,row,col));
  if(el.bgColor=="blue" || el.bgColor=="red") {
    el.bgColor="white";
    neighbours(height,width,row,col,-1);
  }
  else {
    el.bgColor="blue";
    neighbours(height,width,row,col,1);
  }
 }
}

function step(height,width) {
 var i,j;
 // first pass
 for(j=0;j<height;j++){
 for(i=0;i<width;i++){
  var el = document.getElementById(create_name(height,width,j,i));
  var nei = parseInt(el.innerHTML);
  if(el.bgColor=="blue" && (nei<2 || nei>3)) {
    // mark as dead
    el.bgColor="red";
  }
  if(el.bgColor!="blue" && nei==3) {
    // mark as born
    el.bgColor="purple";
  }
 }}
 // second pass
 for(j=0;j<height;j++){
 for(i=0;i<width;i++){
  var el = document.getElementById(create_name(height,width,j,i));
  if(el.bgColor=="red" || el.bgColor=="purple") {
    // remove (if red) or add (if purple)
    setcolor(height,width,j,i);
  }
 }}
}
