var partie = -1;
var moves0;
var commentaires;
var restr = new Array('1-0','0-1','1/2-1/2','*');
var Mypcs = " pnbrqk";
var files = "abcdefgh";
var ranks = "87654321";
var pieces = ' PNBRQK';
var imgurl = "images/jschessboard/";
var delay = 1500;
var initposn = new Array(
12,10,11,13,14,11,10,12,
9,9,9,9,9,9,9,9,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,
4,2,3,5,6,3,2,4,0);
var curmov = new Array(0);
var boards = new Array(0);
var mpasts = new Array(0);
var jbrds = new Array(0);
var nodraws = new Array(0);
var atgms = new Array(0);
var timerids = new Array(0);
var timecalls = new Array(0);

var coupsPgn = new Array();

function DrawPc(pc, sqr){
 var color, piece;
 if(nodraws[partie]) return;
 piece = Mypcs.charAt(pc & 7);
 color = (pc & 8) ? "b" : "w";
 if(piece == ' '){
   piece = "i";
   color = "";
 }
 if(boards[partie][64] & 1) sqr = 63 - sqr;
 document.images[jbrds[partie] + sqr].src = imgurl + color + piece + ".gif";
 setTimeout("", 50);
}
function InitBoard()
{
 for(i=0; i<=64; i++)
    boards[partie][i] = initposn[i];
}
function FindScrBrd()
{
 for(i=0;i < document.images.length; i++)
    if(document.images[i].name != "")
      if(document.images[i].name == 'brd' + partie.toString()){
         jbrds[partie] = i;
         return;
         }
}
function DrawBoard()
{
 for(i=0; i<64; i++)
    DrawPc(boards[partie][i], i);
}
function DoMv(pc, to, from)
{
 boards[partie][to] = pc;
 boards[partie][from] = 0;
 DrawPc(0, from);
 DrawPc(pc, to);
}
function AutoMv()
{
 timecalls[partie] = 1;
 Forward();
 coup = MvStr();
 displayCoup(coup);
 timecalls[partie] = 0;
}
function Astop()
{
 atgms[partie] = -1;
 timecalls[partie] = 0;
 clearInterval(timerids[partie]);
}
function changeGame(part){
	partie = part;
	moves0 = eval("coups"+partie);
	commentaires = eval("commentaires"+partie);
}
function Astart(part)
{
	if (part!=null && part!=partie) changeGame(part);
 if(atgms[partie]==0)
   Astop();
 else{
 atgms[partie]=0;
 timerids[partie] = setInterval('AutoMv()', delay);
 AutoMv();
}
	
}
function Flip(part)
{
	if (part!=null && part!=partie) changeGame(part);
 boards[partie][64] ^= 1;
 DrawBoard();
}
function GetOrds(sqr, flags)
{
 var co = "";
 if(flags & 0x40)
   co = files.charAt(sqr & 7);
 if(flags & 0x80)
   co = co + ranks.charAt((sqr & 0x38) >> 3);
 return co;
}

function GoStart()
{
 if(atgms[partie]>=0)
   Astop();
 nodraws[partie]=1;
 while(curmov[partie] > 0)
      Back();
 nodraws[partie]=0;
 DrawBoard();
 resetDiv();
}
function GoEnd(part)
{
	if (part!=null && part!=partie) changeGame(part);
 if(atgms[partie]>=0)
   Astop();
 nodraws[partie]=1;
 while(curmov[partie] < moves0.length / 2)
      Forward();
 nodraws[partie]=0;
 DrawBoard();
}
function Forward(part)
{
	if (part!=null && part!=partie) changeGame(part);
 if(curmov[partie] >= 0 && curmov[partie] < moves0.length / 2){
    var n = curmov[partie] * 2;
    var from = moves0[n] & 0x3f;
    var to = to2 = moves0[n+1] & 0x3f;
    var piece = mpasts[partie][n] = boards[partie][from];
    mpasts[partie][n+1] = boards[partie][to];
    promo = (moves0[n] & 0x700)
    if(promo != 0)
       piece = (piece & 8) + (promo >> 8);
    DoMv(piece, to, from);
    curmov[partie]++;
    if(moves0[n] & 0x40){
       to = from;
       (moves0[n] & 0x80) ? ++to : --to;
       if((to2 + from) & 1){
         boards[partie][to] = 0;
         DrawPc(0, to);
         }
       else{
         from = ((from - to2) > 0) ? from - 4: from + 3;
         DoMv(boards[partie][from], to, from);
         }
      }
    if(timecalls[partie]==0 && atgms[partie]>=0)
      Astop();
    }
 else
   if(atgms[partie]>=0)
     Astop();
}
function Back(part)
{
	if (part!=null && part!=partie) changeGame(part);
 if(atgms[partie]>=0)
   Astop();
 if(curmov[partie] > 0){
   var n = (--curmov[partie] * 2);
   var from = moves0[n] & 0x3f;
   var to = to2 = moves0[n+1] & 0x3f;
   var piece = mpasts[partie][n];
	DoMv(piece, from, to);
   boards[partie][to] = piece = mpasts[partie][n+1]
   if(piece > 0)
     DrawPc(piece, to);
   if(moves0[n] & 0x40){
     to = from;
     (moves0[n] & 0x80) ? ++to : --to;
     if((to2 + from) & 1){
       boards[partie][to] = (mpasts[partie][n] & 8) ? 1 : 9;
       DrawPc(boards[partie][to], to);
       
       }
     else{
       from = ((from - to2) > 0) ? from - 4 : from + 3;
       DoMv(boards[partie][to], from ,to);
       }
     }
   }
}
function GoMv(mv,part)
{
	if (part!=null && part!=partie) changeGame(part);
 nodraws[partie] = 1;
 if(curmov[partie] > mv)
   while(curmov[partie] > mv)
        Back();
 else
   while(curmov[partie] < mv)
        Forward();
 nodraws[partie] = 0;
 DrawBoard();
 coup = MvStr();
 displayCoup(coup);
}
function MvStr()
{
 if(curmov[partie] > 0 && curmov[partie] <= moves0.length / 2 ){
    var n = (curmov[partie]-1)*2;
    var from = moves0[n] & 0x3f;
    var to = moves0[n+1] & 0x3f;
    var mvs = (Math.floor((curmov[partie]+1)>>1)).toString() + ". ";
    if(boards[partie][to] & 8)
      mvs += '... ';
    var chk = (moves0[n+1] & 0x100) ? "+" : "";
    if(n+2 == moves0.length){
      var res = (moves0[n+1] & 0x600)>>9;
      //chk += ' ' + restr[res];
      }
    if(moves0[n] & 0x40){
      if((boards[partie][to] & 7) == 6){
        if(moves0[n] & 0x80)
          mvs = mvs + "O-O";
        else
          mvs = mvs + "O-O-O";
        return mvs + chk;
        }
      }
    var apc = boards[partie][to] & 7;
    piece = (apc == 1) ? "" : pieces.charAt(apc);
    var piece2 = "";
    if(moves0[n] & 0x700){
      piece2 = "=" + pieces.charAt((moves0[n] & 0x700) >> 8);
      piece ="";
      }
    capflg = "";
    if((mpasts[partie][n+1]) || (moves0[n] & 0x40))
      capflg = "x";
    mvs = mvs + piece + GetOrds(from, moves0[n+1]) + capflg
          + GetOrds(to, 0xC0) + piece2;
    return mvs + chk;
    }
 return "";
}
function InitSys()
{
 FindScrBrd();
 InitBoard();
}
function displayCoup(coup){
	document.getElementById("jscoup"+partie).innerHTML = "<font size=1><b>"+coup+"</b></font>";
	comment = commentaires[curmov[partie]];
	if (comment!=null && comment!=""){
		document.getElementById("divcommentaires"+partie).innerHTML = "<font size=1>"+comment+"</font>";
	}
	else document.getElementById("divcommentaires"+partie).innerHTML = "";
}

function resetDiv(){
	document.getElementById("jscoup"+partie).innerHTML = "";
	document.getElementById("divcommentaires"+partie).innerHTML = "";
}
