var focussquare = -1; // no focus
var WIDTH;
var HEIGHT;
var squaresize;
var squares;
var historia;
var today;
var lastday;

var PREFIX = "http://www.apronus.com/images/chess/";
var EMPTY = 0;
var WHITEKING = 1;
var BLACKKING = 2;
var WHITEQUEEN = 3;
var BLACKQUEEN = 4;
var WHITEROOK = 5;
var BLACKROOK = 6;
var WHITEBISHOP = 7;
var BLACKBISHOP = 8;
var WHITEKNIGHT = 9;
var BLACKKNIGHT = 10;
var WHITEPAWN = 11;
var BLACKPAWN = 12;

var whitekingonlight = new Image();
var whitequeenonlight = new Image();
var whiterookonlight = new Image();
var whitebishoponlight = new Image();
var whiteknightonlight = new Image();
var whitepawnonlight = new Image();
var whitekingondark = new Image();
var whitequeenondark = new Image();
var whiterookondark = new Image();
var whitebishopondark = new Image();
var whiteknightondark = new Image();
var whitepawnondark = new Image();
var blackkingondark = new Image();
var blackqueenondark = new Image();
var blackrookondark = new Image();
var blackbishopondark = new Image();
var blackknightondark = new Image();
var blackpawnondark = new Image();
var blackkingonlight = new Image();
var blackqueenonlight = new Image();
var blackrookonlight = new Image();
var blackbishoponlight = new Image();
var blackknightonlight = new Image();
var blackpawnonlight = new Image();
var lightsquare = new Image();
var darksquare = new Image();

var emptysquareselected = new Image();
var whitekingselected = new Image();
var whitequeenselected = new Image();
var whiterookselected = new Image();
var whitebishopselected = new Image();
var whiteknightselected = new Image();
var whitepawnselected = new Image();
var blackkingselected = new Image();
var blackqueenselected = new Image();
var blackrookselected = new Image();
var blackbishopselected = new Image();
var blackknightselected = new Image();
var blackpawnselected = new Image();

function erroralert(napis) { document.write(napis); }

function initsquaresArray()
{
 squares = new Array(WIDTH*HEIGHT+13)
}

function initemptyboard()
{
 for (var n=0; n<WIDTH*HEIGHT; n++) squares[n] = EMPTY;
}

function vert(n) { return n%WIDTH + 1 }
function hori(n) { return HEIGHT - Math.floor(n/WIDTH) }
function tosquare(x,y) { return (HEIGHT-y)*WIDTH + x - 1 }
function putsquare(x,y,what) { squares[tosquare(x,y)] = what; }

function initstartingposition()
{
 initemptyboard();
 if (HEIGHT < 4)
 {
  alert("Starting position not available for current board dimensions.\nBoard height must be at least 4.");
  return;
 }
 if (WIDTH < 8)
 {
  alert("Starting position not available for current board dimensions.\nBoard width must be at least 8.");
  return;
 }

 var ilerazy = Math.floor(WIDTH/8);
 var i; var k; var m;
 for (i=0; i<ilerazy; i++)
 {
  putsquare(i*8+1,1,WHITEROOK);
  putsquare(i*8+2,1,WHITEKNIGHT);
  putsquare(i*8+3,1,WHITEBISHOP);
  putsquare(i*8+4,1,WHITEQUEEN);
  putsquare(i*8+5,1,WHITEKING);
  putsquare(i*8+6,1,WHITEBISHOP);
  putsquare(i*8+7,1,WHITEKNIGHT);
  putsquare(i*8+8,1,WHITEROOK);
  putsquare(i*8+1,2,WHITEPAWN);
  putsquare(i*8+2,2,WHITEPAWN);
  putsquare(i*8+3,2,WHITEPAWN);
  putsquare(i*8+4,2,WHITEPAWN);
  putsquare(i*8+5,2,WHITEPAWN);
  putsquare(i*8+6,2,WHITEPAWN);
  putsquare(i*8+7,2,WHITEPAWN);
  putsquare(i*8+8,2,WHITEPAWN);
  putsquare(i*8+1,HEIGHT,BLACKROOK);
  putsquare(i*8+2,HEIGHT,BLACKKNIGHT);
  putsquare(i*8+3,HEIGHT,BLACKBISHOP);
  putsquare(i*8+4,HEIGHT,BLACKQUEEN);
  putsquare(i*8+5,HEIGHT,BLACKKING);
  putsquare(i*8+6,HEIGHT,BLACKBISHOP);
  putsquare(i*8+7,HEIGHT,BLACKKNIGHT);
  putsquare(i*8+8,HEIGHT,BLACKROOK);
  putsquare(i*8+1,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+2,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+3,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+4,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+5,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+6,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+7,HEIGHT-1,BLACKPAWN);
  putsquare(i*8+8,HEIGHT-1,BLACKPAWN);
  for (k=3; k<= HEIGHT-2; k++)
    for (m=1; m<=8; m++) putsquare(i*8+m,k,EMPTY);
 }
}

function initbystanders()
{
 var ii = WIDTH*HEIGHT;
 squares[ii]    = WHITEKING;   squares[ii+1]  = WHITEQUEEN;  squares[ii+2]  = WHITEROOK;
 squares[ii+3]  = WHITEBISHOP; squares[ii+4]  = WHITEKNIGHT; squares[ii+5]  = WHITEPAWN;
 squares[ii+6]  = BLACKKING;   squares[ii+7]  = BLACKQUEEN;  squares[ii+8]  = BLACKROOK;
 squares[ii+9]  = BLACKBISHOP; squares[ii+10] = BLACKKNIGHT; squares[ii+11] = BLACKPAWN;
 squares[ii+12] = EMPTY;
}

function initloadedimages(pathprefix)
{
 lightsquare.src = pathprefix + "lightsquare.gif";
 darksquare.src = pathprefix + "darksquare.gif";

 whitekingonlight.src = pathprefix + "whitekingonlight.gif";
 whitequeenonlight.src = pathprefix + "whitequeenonlight.gif";
 whiterookonlight.src = pathprefix + "whiterookonlight.gif";
 whitebishoponlight.src = pathprefix + "whitebishoponlight.gif";
 whiteknightonlight.src = pathprefix + "whiteknightonlight.gif";
 whitepawnonlight.src = pathprefix + "whitepawnonlight.gif";
 whitekingondark.src = pathprefix + "whitekingondark.gif";
 whitequeenondark.src = pathprefix + "whitequeenondark.gif";
 whiterookondark.src = pathprefix + "whiterookondark.gif";
 whitebishopondark.src = pathprefix + "whitebishopondark.gif";
 whiteknightondark.src = pathprefix + "whiteknightondark.gif";
 whitepawnondark.src = pathprefix + "whitepawnondark.gif";
 blackkingondark.src = pathprefix + "blackkingondark.gif";
 blackqueenondark.src = pathprefix + "blackqueenondark.gif";
 blackrookondark.src = pathprefix + "blackrookondark.gif";
 blackbishopondark.src = pathprefix + "blackbishopondark.gif";
 blackknightondark.src = pathprefix + "blackknightondark.gif";
 blackpawnondark.src = pathprefix + "blackpawnondark.gif";
 blackkingonlight.src = pathprefix + "blackkingonlight.gif";
 blackqueenonlight.src = pathprefix + "blackqueenonlight.gif";
 blackrookonlight.src = pathprefix + "blackrookonlight.gif";
 blackbishoponlight.src = pathprefix + "blackbishoponlight.gif";
 blackknightonlight.src = pathprefix + "blackknightonlight.gif";
 blackpawnonlight.src = pathprefix + "blackpawnonlight.gif";

 emptysquareselected.src = pathprefix + "emptysquareselected.gif";
 whitekingselected.src = pathprefix + "whitekingselected.gif";
 whitequeenselected.src = pathprefix + "whitequeenselected.gif";
 whiterookselected.src = pathprefix + "whiterookselected.gif";
 whitebishopselected.src = pathprefix + "whitebishopselected.gif";
 whiteknightselected.src = pathprefix + "whiteknightselected.gif";
 whitepawnselected.src = pathprefix + "whitepawnselected.gif";
 blackkingselected.src = pathprefix + "blackkingselected.gif";
 blackqueenselected.src = pathprefix + "blackqueenselected.gif";
 blackrookselected.src = pathprefix + "blackrookselected.gif";
 blackbishopselected.src = pathprefix + "blackbishopselected.gif";
 blackknightselected.src = pathprefix + "blackknightselected.gif";
 blackpawnselected.src = pathprefix + "blackpawnselected.gif";
}

function isbystander(n)
{ return n>=WIDTH*HEIGHT && n<=WIDTH*HEIGHT+12; }

function isempty(n) { return squares[n] == EMPTY; }

function squarecolor(n)
{
 if (isbystander(n)) return "light";
 var upperleft; var negupperleft;

 if ( a1 == 'dark' )
 {
  if (HEIGHT%2 == 0) { upperleft = 'light'; negupperleft = 'dark'; }
                else { upperleft = 'dark'; negupperleft = 'light'; }
 }
 else
 {
  if (HEIGHT%2 == 0) { upperleft = 'dark'; negupperleft = 'light'; }
                else { upperleft = 'light'; negupperleft = 'dark'; }
 }

 if (WIDTH%2 == 1)
 { if (n%2==0) return upperleft; return negupperleft; }
 var x = n % WIDTH; var y = Math.floor(n / WIDTH);
 if ((x-y)%2 == 0) return upperleft; return negupperleft;
}

function loaded_image_name(n)
{
 if (isempty(n)) return squarecolor(n) + 'square';
 switch(squares[n])
 {
  case WHITEKING   : return 'whitekingon' + squarecolor(n) ;
  case BLACKKING   : return 'blackkingon' + squarecolor(n) ;
  case WHITEQUEEN  : return 'whitequeenon' +  squarecolor(n) ;
  case BLACKQUEEN  : return 'blackqueenon' +  squarecolor(n) ;
  case WHITEROOK   : return 'whiterookon' +  squarecolor(n) ;
  case BLACKROOK   : return 'blackrookon' +  squarecolor(n) ;
  case WHITEBISHOP : return 'whitebishopon' + squarecolor(n) ;
  case BLACKBISHOP : return 'blackbishopon' + squarecolor(n) ;
  case WHITEKNIGHT : return 'whiteknighton' + squarecolor(n) ;
  case BLACKKNIGHT : return 'blackknighton' + squarecolor(n) ;
  case WHITEPAWN   : return 'whitepawnon' + squarecolor(n) ;
  case BLACKPAWN   : return 'blackpawnon' + squarecolor(n) ;
 }
 erroralert('Error in loaded_image_name()');
}

function reloadsquare(n)
{
 document.images["sq"+n].src = eval( loaded_image_name(n) + '.src' ) ;
}

function reloadboard()
{
 for (var n=0; n<WIDTH*HEIGHT; n++) reloadsquare(n);
}

function reloadbystanders()
{
 for (var n=WIDTH*HEIGHT; n<=WIDTH*HEIGHT+12; n++) reloadsquare(n);
}

function selected_image_name(n)
{
 switch (squares[n])
 {
  case EMPTY : return 'emptysquareselected';
  case WHITEKING   : return 'whitekingselected';
  case BLACKKING   : return 'blackkingselected';
  case WHITEQUEEN  : return 'whitequeenselected';
  case BLACKQUEEN  : return 'blackqueenselected';
  case WHITEROOK   : return 'whiterookselected';
  case BLACKROOK   : return 'blackrookselected';
  case WHITEBISHOP : return 'whitebishopselected';
  case BLACKBISHOP : return 'blackbishopselected';
  case WHITEKNIGHT : return 'whiteknightselected';
  case BLACKKNIGHT : return 'blackknightselected';
  case WHITEPAWN   : return 'whitepawnselected';
  case BLACKPAWN   : return 'blackpawnselected';
 }
 erroralert("Error in selected_image_name()");
}

function selectsquare(n)
{
 document.images["sq"+n].src = eval( selected_image_name(n) + '.src' );
}

function reloadsquaresize()
{
 for (var n=0; n<=WIDTH*HEIGHT+12; n++)
 {
  document.images["sq"+n].width = squaresize;
  document.images["sq"+n].height = squaresize;
 }
}

function reloadsquaresize2()
{
 for (var n=0; n<WIDTH*HEIGHT; n++)
 {
  document.images["sq"+n].width = squaresize;
  document.images["sq"+n].height = squaresize;
 }
}


function isnofocus() { return (focussquare == -1); }

function getfocus() { return focussquare; }

function setnofocus()
{
 if (!isnofocus()) reloadsquare(getfocus());
 focussquare = -1;
 //document.forms.focusform.focusbox.checked = false;
}

function setfocus(n)
{
 if (!isnofocus()) reloadsquare(getfocus()); 
 focussquare = n;
 //document.forms.focusform.focusbox.checked = true;
 selectsquare(n);
}

function inithistoria()
{
 historia = new Array();
 historia[0] = squares.slice(0,WIDTH*HEIGHT);
 today = 0;
 lastday = 0;
}

function makehistoria()
{
 historia[today+1] = squares.slice(0,WIDTH*HEIGHT);
 today++;
 lastday = today;
}

function updatesquares()
{
 for (var n=0; n<WIDTH*HEIGHT; n++)
   if (historia[today][n] != squares[n])
   {
     squares[n] = historia[today][n];
     reloadsquare(n);
   }
}

function seebeginning()
{
 today = 0;
 updatesquares();
}

function seeyesterday()
{
 if (today==0) return;
 today = today-1;
 updatesquares();
}

function seetomorrow()
{
 if (today==lastday) return;
 today = today+1;
 updatesquares();
}

function seelastday()
{
 today = lastday;
 updatesquares();
}

function backundo()
{
 if (today==0) return;
 lastday = today-1;
 seeyesterday();
}


function onchangesquaresize()
{
 var prompttext = "Input new square size. The default size is 36.";
 var ss = parseInt( prompt( prompttext, squaresize) );
 if (ss > 0) { squaresize = ss; reloadsquaresize(); }
}


function z(b)
{
 if (isnofocus()) { setfocus(b); return; }
 var a = getfocus();
 if (!isbystander(a) && !isbystander(b))
 {
  if (a == b) { setnofocus(); return; }
  squares[b] = squares[a];
  reloadsquare(b);
  if (squares[a] != EMPTY)
  {
   squares[a] = EMPTY;
   reloadsquare(a);
  }
  setnofocus();
  makehistoria();
  return;
 }
 if (isbystander(a) && isbystander(b))
 {
  if (a == b) { setnofocus(); return; }
  setfocus(b); return;
 }
 if (isbystander(a) && !isbystander(b))
 {
  squares[b] = squares[a];
  reloadsquare(b);
  if (!document.forms.holdform.holdkeeper.checked) setnofocus();
  makehistoria();
  return;
 }
 if (!isbystander(a) && isbystander(b))
 {
  squares[a] = squares[b];
  reloadsquare(a);
  setnofocus();
  makehistoria();
  return;
 }
}

function onclearboard()
{
 for (n=0; n<WIDTH*HEIGHT; n++)
   if (squares[n] != EMPTY)
   {
    squares[n] = EMPTY;
    reloadsquare(n);
   }
 setnofocus();
 makehistoria();
}

function smartputsquare(x,y,what)
{
 var n = tosquare(x,y);
 if (squares[n] == what) return;
 squares[n] = what;
 reloadsquare(n);
}

function onstartingposition()
{
 setnofocus();
 if (HEIGHT < 4)
 {
  alert("Starting position not available for current board dimensions.\nBoard height must be at least 4.");
  return;
 }
 if (WIDTH < 8)
 {
  alert("Starting position not available for current board dimensions.\nBoard width must be at least 8.");
  return;
 }

 var ilerazy = Math.floor(WIDTH/8);
 var i; var k; var m;
 for (i=0; i<ilerazy; i++)
 {
  smartputsquare(i*8+1,1,WHITEROOK);
  smartputsquare(i*8+2,1,WHITEKNIGHT);
  smartputsquare(i*8+3,1,WHITEBISHOP);
  smartputsquare(i*8+4,1,WHITEQUEEN);
  smartputsquare(i*8+5,1,WHITEKING);
  smartputsquare(i*8+6,1,WHITEBISHOP);
  smartputsquare(i*8+7,1,WHITEKNIGHT);
  smartputsquare(i*8+8,1,WHITEROOK);
  smartputsquare(i*8+1,2,WHITEPAWN);
  smartputsquare(i*8+2,2,WHITEPAWN);
  smartputsquare(i*8+3,2,WHITEPAWN);
  smartputsquare(i*8+4,2,WHITEPAWN);
  smartputsquare(i*8+5,2,WHITEPAWN);
  smartputsquare(i*8+6,2,WHITEPAWN);
  smartputsquare(i*8+7,2,WHITEPAWN);
  smartputsquare(i*8+8,2,WHITEPAWN);
  smartputsquare(i*8+1,HEIGHT,BLACKROOK);
  smartputsquare(i*8+2,HEIGHT,BLACKKNIGHT);
  smartputsquare(i*8+3,HEIGHT,BLACKBISHOP);
  smartputsquare(i*8+4,HEIGHT,BLACKQUEEN);
  smartputsquare(i*8+5,HEIGHT,BLACKKING);
  smartputsquare(i*8+6,HEIGHT,BLACKBISHOP);
  smartputsquare(i*8+7,HEIGHT,BLACKKNIGHT);
  smartputsquare(i*8+8,HEIGHT,BLACKROOK);
  smartputsquare(i*8+1,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+2,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+3,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+4,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+5,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+6,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+7,HEIGHT-1,BLACKPAWN);
  smartputsquare(i*8+8,HEIGHT-1,BLACKPAWN);
  for (k=3; k<= HEIGHT-2; k++)
    for (m=1; m<=8; m++) smartputsquare(i*8+m,k,EMPTY);
 }
 for ( m = ilerazy*8+1 ; m <= WIDTH; m++ )
   for (k=1; k<=HEIGHT; k++) smartputsquare(m,k,EMPTY);
 
 setnofocus();
 makehistoria();
}

/*
function onchangeboard()
{
 var aa = prompt( "Enter: width height (two numbers separated by one space)", WIDTH+" "+HEIGHT );
 if (aa)
 {
  var width_height = /^[0-9]+ [0-9]+$/ ;
  if (width_height.test(aa))
  {
   var new_width = parseInt(aa);
   var new_height = parseInt( aa.substring( aa.indexOf(" ")+1 ) );
   //aa = window.location.pathname;
   aa = "wiseboard.htm";
   aa += "?width=" + new_width + ";height=" + new_height + ";;" ; 
   window.location.replace(aa);
  }
  else
  {
   alert("You have entered invalid data. The board stays the same.");
  }
 }
}
*/

function onbackundo() { setnofocus(); backundo(); }

function invertfigurinecolor(n)
{
 switch (squares[n])
 {
  case WHITEKING   : squares[n] = BLACKKING; break;
  case BLACKKING   : squares[n] = WHITEKING; break;
  case WHITEQUEEN  : squares[n] = BLACKQUEEN; break;
  case BLACKQUEEN  : squares[n] = WHITEQUEEN; break;
  case WHITEROOK   : squares[n] = BLACKROOK; break;
  case BLACKROOK   : squares[n] = WHITEROOK; break;
  case WHITEBISHOP : squares[n] = BLACKBISHOP; break;
  case BLACKBISHOP : squares[n] = WHITEBISHOP; break;
  case WHITEKNIGHT : squares[n] = BLACKKNIGHT; break;
  case BLACKKNIGHT : squares[n] = WHITEKNIGHT; break;
  case WHITEPAWN   : squares[n] = BLACKPAWN; break;
  case BLACKPAWN   : squares[n] = WHITEPAWN; break;
 }
 reloadsquare(n);
}

function oninvertfigurinecolors()
{
 for (var n=0; n<WIDTH*HEIGHT; n++)
  if (!isempty(n)) invertfigurinecolor(n);
 setnofocus();
 makehistoria();
}

function leftrightrow(y)
{
 var temp;
 for (var x=1; x <= Math.floor(WIDTH/2); x++)
 if ( squares[tosquare(x,y)] != squares[tosquare(WIDTH-x+1,y)] )
 {
  temp = squares[tosquare(x,y)];
  squares[tosquare(x,y)] = squares[tosquare(WIDTH-x+1,y)];
  squares[tosquare(WIDTH-x+1,y)] = temp;
  reloadsquare(tosquare(x,y));
  reloadsquare(tosquare(WIDTH-x+1,y));
 }
}

function onleftright()
{
 for (var y=1; y<=HEIGHT; y++) leftrightrow(y);
 setnofocus();
 makehistoria();
}

function updowncolumn(x)
{
 var temp;
 for (var y=1; y <= Math.floor(HEIGHT/2); y++)
 if ( squares[tosquare(x,y)] != squares[tosquare(x,HEIGHT-y+1)] )
 {
  temp = squares[tosquare(x,y)];
  squares[tosquare(x,y)] = squares[tosquare(x,HEIGHT-y+1)];
  squares[tosquare(x,HEIGHT-y+1)] = temp;
  reloadsquare(tosquare(x,y));
  reloadsquare(tosquare(x,HEIGHT-y+1));
 }
}

function onupdown()
{
 for (var x=1; x<=WIDTH; x++) updowncolumn(x);
 setnofocus();
 makehistoria();
}


function onholdchange()
{
 if (!document.forms.holdform.holdkeeper.checked) setnofocus(); 
}

function htmlszachownica()
{
 var n = 0;
 var i; var j;
 var doc = "<p><TABLE border=1 cellspacing=0 cellpadding=0><TR><TD>";
 doc += "<table border=0 cellspacing=0 cellpadding=0>";
 for (j=1; j<=HEIGHT; j++)
 {
  doc += "<tr>";
  for (i=1; i<=WIDTH; i++)
  {
   doc += "<td><img src=" + eval( loaded_image_name(n) + '.src' ) ;
   doc += " width=" + squaresize;
   doc += " height=" + squaresize;
   doc += " name=sq" + n;
   doc += " onmousedown=z(" + n + ")></td>";
   n++;
  }
  doc += "</tr>";
 }
 doc += "</table>";
 doc += "</TD></TR></TABLE></p>";
 return doc;
}

function htmlszachownica2()
{
 var n = 0;
 var i; var j;
 var doc = "<TABLE border=1 cellspacing=0 cellpadding=0><TR><TD>";
 doc += "<table border=0 cellspacing=0 cellpadding=0>";
 for (j=1; j<=HEIGHT; j++)
 {
  doc += "<tr>";
  for (i=1; i<=WIDTH; i++)
  {
   doc += "<td><img src=" + eval( loaded_image_name(n) + '.src' ) ;
   doc += " width=" + squaresize;
   doc += " height=" + squaresize;
   doc += " name=sq" + n;
   doc += " onmousedown=z(" + n + ")></td>";
   n++;
  }
  doc += "</tr>";
 }
 doc += "</table>";
 doc += "</TD></TR></TABLE>";
 return doc;
}

function htmlbystanders()
{
 doc  = "<p><table><tr>";
 doc += "<td><TABLE border=2 cellspacing=0 cellpadding=0><tr>";
 for (var n= WIDTH * HEIGHT; n <= WIDTH * HEIGHT + 12; n++)
 {
  doc += '<td><img' ;
  doc += " name=sq" + n;
  doc += " onmousedown=z(" + n + ")></td>";
 }
 doc += "</tr></TABLE></td>";
 doc += "<td><form name=holdform>";
 doc += "<input type=checkbox name=holdkeeper onchange=onholdchange()> Hold</form></td>";
 doc += "</tr></table></p>";
 return doc;
}



function htmlsubmitform()
{
 var doc = "";
 doc += '<form name="submitform" target="_blank" action="wiseboard.php" method="POST" onsubmit="return newwindow();">' ;
 doc += '<input type="submit" value="New Window">' ;
 doc += '<input type="hidden" name="task">' ;
 doc += '<input type="hidden" name="boardwidth">' ;
 doc += '<input type="hidden" name="boardheight">' ;
 doc += '<input type="hidden" name="boardposition">' ;
 doc += '<input type="hidden" name="squaresize">' ;
 doc += '<input type="hidden" name="historia">' ;
 doc += '<input type="hidden" name="today">' ;
 doc += '<input type="hidden" name="a1">' ;
 doc += '</form>' ;
 return doc;
}

function histring()
{
 var aa = "";
 for (var n=0; n<lastday; n++) aa += historia[n].toString() + ";" ;
 aa += historia[lastday].toString();
 return aa;
}

function initdefault()
{
 squaresize = 36;
 a1 = 'dark';
 WIDTH = 8;
 HEIGHT = 8;
 initsquaresArray();
 initbystanders();
 initstartingposition();
 inithistoria(); 
}

function initsquaresfromhistoria()
{
 initsquaresArray();
 for (var n=0; n<WIDTH*HEIGHT; n++) squares[n] = historia[today][n];
}

function recreatehistoria( historia_transfer_string )
{
 var aa; var n; var i;
 var tablica = historia_transfer_string.split(";");
 historia = new Array(tablica.length);
 lastday = tablica.length - 1;
 for (var n=0; n<=lastday; n++)
 {
  aa = tablica[n].split(",");
  historia[n] = new Array(aa.length);
  for (i=0; i<aa.length; i++) historia[n][i] = parseInt( aa[i] );
 }
 return lastday;
}

function newwindow()
{
 document.forms.newwindowform.task.value = 'newwindow';
 document.forms.newwindowform.boardwidth.value = WIDTH;
 document.forms.newwindowform.boardheight.value = HEIGHT;
 document.forms.newwindowform.squaresize.value = squaresize;
 document.forms.newwindowform.historia.value = histring();
 document.forms.newwindowform.today.value = today;
 document.forms.newwindowform.a1.value = a1;
 return true;
}

function changeboard()
{
 var aa = prompt( "Enter: width height (two numbers separated by one space)", WIDTH+" "+HEIGHT );
 if (aa)
 {
  var width_height = /^[0-9]+ [0-9]+$/ ;
  if (width_height.test(aa))
  {
   var new_width = parseInt(aa);
   var new_height = parseInt( aa.substring( aa.indexOf(" ")+1 ) );
   document.forms.changeboardform.task.value = 'changeboard';
   document.forms.changeboardform.boardwidth.value = new_width;
   document.forms.changeboardform.boardheight.value = new_height;
   document.forms.changeboardform.squaresize.value = squaresize;
   document.forms.changeboardform.historia.value = "lost_history";
   document.forms.changeboardform.today.value = "notoday";
   document.forms.changeboardform.a1.value = a1;
   return true;
  }
  else
  {
   alert("You have entered invalid data. The board stays the same.");
   return false;
  }
 }
}

function onfirst() { setnofocus(); seebeginning(); }
function onprev() { setnofocus(); seeyesterday(); }
function onnext() { setnofocus(); seetomorrow(); }
function onlast() { setnofocus(); seelastday(); }
