var glb_forsythe_str, glb_caption_str, glb_title_str;
var glb_start_indexes, glb_num_displays;
var glb_num_games;

var glb_shade;
var glb_game = 0, glb_index = 0;


//  Function to map light and dark squares.

function Square_is_Light_or_Dark()
{
  var row, col;
  var square;

  glb_shade = new Array();
  square = 0;
  for (row = 0; row < 8; row++)
  {
    for (col = 0; col < 8; col++, square++)
    {
      if ((row + col) % 2 != 0)
	glb_shade[square] = "d.gif";
      else
        glb_shade[square] = "l.gif";
    }
  }
}


//  Function to convert Forsythe_Notation to a 64-square board array.

function Display_Diagram(Forsythe_Notation, Caption, Title)
{
  var row, col;
  var num;
  var square;
  var index;
  var num_of_empty_squares;
  var length_of_Forsythe_Notation;
  var current_char = "";
  var icon = "";
  var piece;

  piece = new Array();
  square = 0;
  length_of_Forsythe_Notation = Forsythe_Notation.length;
  for (index = 0; index < length_of_Forsythe_Notation; index++)
  {
    current_char = Forsythe_Notation.charAt(index);
    if (current_char == "/")
    {
      continue;
    }
    if (current_char == "p")
    {
      piece[square] = "bp";
      square++;
      continue;
    }
    if (current_char == "P")
    {
      piece[square] = "wp";
      square++;
      continue;
    }
    if (current_char == "n")
    {
      piece[square] = "bn";
      square++;
      continue;
    }
    if (current_char == "N")
    {
      piece[square] = "wn";
      square++;
      continue;
    }
    if (current_char == "b")
    {
      piece[square] = "bb";
      square++;
      continue;
    }
    if (current_char == "B")
    {
      piece[square] = "wb";
      square++;
      continue;
    }
    if (current_char == "r")
    {
      piece[square] = "br";
      square++;
      continue;
    }
    if (current_char == "R")
    {
      piece[square] = "wr";
      square++;
      continue;
    }
    if (current_char == "k")
    {
      piece[square] = "bk";
      square++;
      continue;
    }
    if (current_char == "K")
    {
      piece[square] = "wk";
      square++;
      continue;
    }
    if (current_char == "q")
    {
      piece[square] = "bq";
      square++;
      continue;
    }
    if (current_char == "Q")
    {
      piece[square] = "wq";
      square++;
      continue;
    }
    num_of_empty_squares = parseInt(current_char);
    for (num = 0; num < num_of_empty_squares; num++)
    {
      piece[square] = "s";
      square++;
    }
  }
  //
  //Create Diagram Display HTML
  //
  parent.frames[1].document.open();
  parent.frames[1].document.write("<HTML><BODY background=\"../chessboard/bg.jpg\"><center>");
  parent.frames[1].document.write("<b>" + Title + "</b><BR>");
  parent.frames[1].document.write("<NOBR>");
  square = 0;
  for (row = 0; row < 8; row++)
  {
    for (col = 0; col < 8; col++)
    {
      icon = "img src=\"../chessboard/" + piece[square] + glb_shade[square] + "\" height=33 width=33";
      parent.frames[1].document.write("<" + icon + ">");
      square++;
    }
    parent.frames[1].document.write("<BR CLEAR=ALL>");
  }
  parent.frames[1].document.write("</NOBR>");
  if(glb_game > 0)
  {
    parent.frames[1].document.write("<FORM>");
    if(glb_index == 0)
    {
      parent.frames[1].document.write("<INPUT TYPE=\"button\" VALUE=\"Hint\" onClick=\"parent.frames[0].Display_Position(parent.frames[0].glb_game,parent.frames[0].glb_index,true);\">");
      parent.frames[1].document.write(" <INPUT TYPE=\"button\" VALUE=\"Solution\" onClick=\"parent.frames[0].Display_Position(parent.frames[0].glb_game,parent.frames[0].glb_index+1,false);\">");
    }
    else
    {
      parent.frames[1].document.write("<INPUT TYPE=\"button\" VALUE=\"&lt; Previous\" onClick=\"parent.frames[0].Display_Position(parent.frames[0].glb_game,parent.frames[0].glb_index-1,false);\">");
      if(glb_index < glb_num_displays[glb_game]-1)
        parent.frames[1].document.write(" <INPUT TYPE=\"button\" VALUE=\"Next Move &gt;\" onClick=\"parent.frames[0].Display_Position(parent.frames[0].glb_game,parent.frames[0].glb_index+1,false);\">");
    }
    parent.frames[1].document.write("</FORM>");
  }
  parent.frames[1].document.write("</center>");
  parent.frames[1].document.write(Caption);
  parent.frames[1].document.write("</BODY></HTML>");
  parent.frames[1].document.close();
}

// Display the specified board position

function Display_Position(game, index, hint)
{

  glb_game = game;
  glb_index = index;

  if(hint || index != 0)
    Display_Diagram(glb_forsythe_str[glb_start_indexes[game] + index], 
                    glb_caption_str[glb_start_indexes[game] + index], 
                    glb_title_str[glb_start_indexes[game] + index]);
  else
    Display_Diagram(glb_forsythe_str[glb_start_indexes[game] + index], "", 
                    glb_title_str[glb_start_indexes[game] + index]);
}
