var doc=document;
ie4=(doc.all)?1:0;
ns6=(doc.getElementById)&&!(ie4);
ns4=(doc.layers)?1:0;
doc.onkeydown = KeyDown;
var pc=cg=cb=0;
var ps=29;
if(ie4)doc.onmousemove=MsMove;
if(ns6)doc.onclick=ns6Click;
var cp=sp=mp=ri=0;
var s1=s2=mrb=0;
var mr=[0,0];
var ipcs='ipnbrqkxov';
function DrawPc(g,pc,sqr)
{
 var clr, pi, sz;
 sz=clr='';
 pi=ipcs.charAt(pc>=23?pc-16:pc&7);
 if(pc>0&&pc<23)
  clr=(pc&8)?'b':'w';
 if(gflip[g])
   sqr=63-sqr;
 if(ps!=29)
  sz=ps;
 doc.images[jb[g]+sqr].src=imgurl+clr+pi+sz+'.gif';
}
var fench='/PNBRQK//pnbrqk12345678XOV';
function Fen2Brd(g,fn)
{
 var fc;
 var s=0;
 for(i=0;i<64;i++){
  fc=fench.indexOf(fn.charAt(s++));
  if(fc<=14||fc>=23)
   gb[g][i]=fc;
  else{
   fc-=14;
   while(fc--)
    gb[g][i++]=0;
   --i;
   }
  }
}
function InitBoard(g)
{
 Fen2Brd(g,gf[g]);
 cg=g;
 gi[g]=1;
}
function FindScrBrd()
{
 j=0;
 for(i=0;i<doc.images.length;i++)
  if(doc.images[i].name != '')
   if(doc.images[i].name=='brd'+j.toString()){
    jb[j]=i;
    ++j;
    i+=62;
    }
}
function DrawBoard(g)
{
 for(i=0;i<64;i++)
  DrawPc(g,gb[g][i],i);
}
function DoMv(g,pc,to,from)
{
 gb[g][to]=pc;
 gb[g][from]=0;
}
function GoStart(g)
{
 InitBoard(g);
 DrawBoard(g);
}
function Flip(g)
{
 gflip[g]^=1;
 DrawBoard(g);
}
function Back(g)
{
 if(cg!=g){
  ri=0;
  cg=g;
 }
 if(ri){
  Brec(g);
  return;
 }
}
function KeyDown(e)
{
 var key = 0;
 key=ie4?event.keyCode:e.which;
 if(key!=0)
   ActOnKey(key);
}
function ActOnKey(key)
{
 if(key==37||key==100)
   Back(cg)
 if(key==103)
   GoStart(cg)
 if(key==111)
   Flip(cg)
}
function Brec(g)
{
 sp=mr[--ri];
 cp=mr[--ri];
 s2=mr[--ri];
 s1=mr[--ri];
 mp=gb[g][s1]=gb[g][s2];
 if(sp!=-1){
  if(sp==1)
   mp=gb[g][s1]&=9;
  else{
   gb[g][sp]=mp&8+4;
   if(s2>s1) // O-O
    sp-=2;
   else
    sp+=3;
   gb[g][sp]=0;
   }
 }
 gb[g][s2]=cp;
 DrawBoard(g);
 if(ri){
  s2=mr[ri-3];
  s1=mr[ri-4];
  mp=gb[g][s2];
  }
}
var MsX=MsY=0;
var PcX=PcY=0;
var Bx=By=0;
var nq=dgp=dgs=0;
function MsMove()
{
 if(ie4){
  if(dgp){
   MvPc(event.x, event.y);
   }  
 }
}
function MvPc(x,y)
{
 PcX-=MsX-x;
 PcY-=MsY-y;
 MsX=x;
 MsY=y;
 doc.all.pc1.style.pixelLeft=PcX;
 doc.all.pc1.style.pixelTop=PcY;
 return false;
}
function DropPc(g)
{
 var Sx,Sy;

 doc.all.pc1.style.visibility='hidden';

 if(PcX+(ps/2)<Bx||PcX+(ps/2)>(Bx+(ps*8))){
   PcOffBrd(g);
   return false;
   }
 if(PcY+(ps/2)<By||PcY+(ps/2)>(By+(ps*8))){
   PcOffBrd(g);
   return false;
   }

 Sx=PcX-Bx+(ps/2);
 Sy=PcY-By+(ps/2);
 Sx=Math.floor(Sx/ps);
 Sy=Math.floor(Sy/ps);

 nq=Sy*8+Sx;
 if(gflip[g])
  nq=63-nq;

 Kibitz(g);
 return false;
}
function BrdNum(g,sz)
{
 var s,a8,sqr;

 cg=g;
 ps=sz;
 if(cg!=mrb){
  ri=0;
  mrb=cg;
  }
if(gi[g]!=1)
 InitBoard(g);
if(ns6){
 ns6B=1;
 return false;
}
if(ie4){
e=window.event;
a8=doc.images[jb[g]].sourceIndex;
if(dgp==0){
 sqr=doc.elementFromPoint(MsX=e.clientX,MsY=e.clientY).sourceIndex;
 PcX=MsX-e.offsetX+doc.body.scrollLeft;
 PcY=MsY-e.offsetY+doc.body.scrollTop;
 Bx=PcX-doc.all[sqr].offsetLeft;
 By=PcY-doc.all[sqr].offsetTop;
 s=sqr-a8;
 s-=Math.floor(s/9);
 if(gflip[g])
   s=63-s;

  dgp=gb[g][s];
  if(dgp){
   dgs=s;
   col=dgp&8?'b':'w';
   if(ps==29)
    sz='';
   pcstr=imgurl+col+ipcs.charAt(dgp&7)+sz+'.gif';
   doc.images['dpc'].src=pcstr;
   gb[g][s]=0;
   DrawPc(g,0,s);
   doc.all.pc1.style.pixelLeft=PcX;
   doc.all.pc1.style.pixelTop=PcY;
   doc.all.pc1.style.visibility='visible';
   return false;
  }
 }
 else
  DropPc(cg);
  return false;
 }
}
function PcOffBrd(g)
{
alert('Piece Off Board!');
 gb[g][dgs]=dgp;
 DrawPc(g,dgp,dgs);
 dgp=0;
}
function Kibitz(g)
{
 sp=-1;
 if(dgp==1||dgp==9)
  if(nq<8||nq>55){
    dgp+=4;
    sp=1;
  }
 if(dgp==6&&dgs==60)
  if(nq==62)
   DoMv(g,4,61,sp=63);
  else
   if(nq==58)
    DoMv(g,4,59,sp=56);

 if(dgp==14&&dgs==4)
  if(nq==6)
   DoMv(g,12,5,sp=7);
  else
   if(nq==2)
    DoMv(g,12,3,sp=0);

 s1=mr[ri++]=dgs;
 s2=mr[ri++]=nq;
 mr[ri++]=gb[g][nq];
 mr[ri++]=sp;
 mp=gb[g][nq]=dgp;
 DrawBoard(g)
 dgp=0;
}
var ns6T=ns6B=0;
function ns6Click(e)
{
 ns6T=e.target;
 if(ns6B)
  ns6Brd(cg);
 else
  dgp=0;
 ns6B=0;
}
function ns6Brd(g)
{
 for(i=0;i<64;i++)
  if(doc.images[jb[g]+i]==ns6T)break;
 if(i<64){
  if(gflip[g])
   i=63-i;
  if(dgp){
   nq=i;
   gb[g][dgs]=0;
   Kibitz(g);
   }
  else{
   dgp=gb[g][i];
   if(dgp)
    dgs=i;
   }
  }
}
var wt=0;
function InitSys()
{
 FindScrBrd();
 InitBoard(0);
}
