// Chess v3.04
var tID,M,I,P,N,q,K,K,Btime
var Bt,Al,Ds,BE,Rh,G,R,KL,STM,j,MV,x,y,b,w,a,Y,PY,bY
inic();

function inic(){
M=I=P=N=q=K=J=Btime=0
Bt=1999
Al=-Bt
Ds=[10,-10]
BE=120
Rh=[]
G=[]
R=[]
KL=[3,3]
STM=0
j=[0,1,5,3,3,9,63,0]
MV=[0,0,[1,10],[21,19,12,8],[11,9],[1,10,11,9],[1,10,11,9],0]
for(z=0;z<8;){
   j[z+8]=j[z]<<=4
   m=MV[z++]
   if(m){
      s=m.length
      for(x=0;x<s;){
         m[s+x]=-m[x++]
      }
   }
}

//  ---------------------------------------

x='g00000000g'
y='gggggggggg'
b=y+y+"g23456432gg11111111g"+x+x+x+x+"g99999999ggABCDECBAg"+y+y
w=x+x+x+"000111100000123321000123553210"
a='000012346900'
Y=[]
PY=[]
bY=[]
for(y=0;y<12;y++){
   for(x=0;x<10;x++){
      z=(y*10)+x
      PY[z]=parseInt(a.charAt(y))
      bY[z]=parseInt(w.charAt((z<60)?z:119-z),35)&7
      R[z]=parseInt(b.charAt(z),35)
   }
}

//  ---------------------------------------

R[BE]=0
A=E=document.all
DM=document.getElementsByTagName||null
draw();
}

//  ---------------------------------------
function msg(dp,ms){
var ek=document.getElementById('dis'+dp)
	if (ek) ek['innerHTML'] ='<font class="texst'+dp+'">&nbsp;'+ms+'</font>';
}

//  ---------------------------------------

cp=new Function('a','b','return b[0]-a[0]')
function Z(c,U,C,s,e,A,B,K){
   var z=-1,C=-C,V=8-U,b=Al,r=R,S,E=r[e],g,d
   if(C<-400)return[C,s,e]
   r[e]=S=r[s]
   r[s]=0
   if(S)G[V][G[V].length]=[S,e]
   if(S-U==1 && r[e+Ds[U>>3]]>15){
      r[e]+=4
   }
   if(S-U==6&&(s-e==2||e-s==2)){
      g=s-4+(s<e)*7
      d=(s+e)>>1
      r[g]=0
      r[d]=U+2
   }
   var L=Pz(U,K,C),N=L.length,n
   if(N){
      if(c){
         L.sort(cp)
         c--
         var i=L[0],j=i[1],k=i[2],t
         b=-Z(c,V,i[0],j,k,-B,-A,i[3])[0]
         for(z=1;z<N;z++){
            if(b>A)A=b
            n=L[z]
            t=-Z(c,V,n[0],n[1],n[2],-A-1,-A,n[3])[0]
            if((t>A)&&(t<B))t=-Z(c,V,n[0],n[1],n[2],-B,-t,n[3])[0]
            if(t>b){
               b=t
               j=n[1]
               k=n[2]
               if(t>A)A=t
               if(b>B)break;
            }
         }
      }
      else{
         b=Al
         while(--N&&B>b){
            if(L[N][0]>b){
               b=L[N][0]
            }
         }
      }
   }
   else{
      fy(0)
   }
   if(g){
      r[g]=U+2
      r[d]=0
   }
   r[s]=S
   r[e]=E
   G[V].length--
   return[b,j,k]
}

//  ---------------------------------------

function Sf(c,U,s,e,K){
   var E=R[e],S=R[e]=R[s]
   R[s]=0
   H()
   U=Z(c,U,0,BE,BE,Al,Bt,K)
   R[s]=S
   R[e]=E
   return U[0]
}

//  ---------------------------------------
function pon() {
	clearTimeout(tID)
	var t=Z(2,M,0,BE,BE,Al,Bt,K)
	return mv(t[1],t[2],0)
}
//  ---------------------------------------
function mv2(s,e,b){
   var E=R[e],S=R[s],a=S&7,u=M>>3,c=0,t=0,z=0,p
      p=Pz(M,K,0)
      for(;z<p.length;z++){
         t=t||(s==p[z][1]&&e==p[z][2])
      }
      if(!t||(Sf(1,8-M,s,e,K)>400))return 0
   return 1;
}

//  ---------------------------------------

function mv(s,e,b){
   var E=R[e],S=R[s],a=S&7,u=M>>3,c=0,t=0,z=0,p,dstr
   msg('2','');   	
   if(M==P){
      H()
      p=Pz(M,K,0)
      for(;z<p.length;z++){
         t=t||(s==p[z][1]&&e==p[z][2])
      }
      if(!t||(Sf(0,8-M,s,e,K)>400)){
      		msg('2','Illegal move!');
      	return 0
      }
   }
   if(Sf(0,M,s,e,K)>400)c=1
   if(Sf(1,8-M,s,e,K)<-400)
   {
   	if (!c && P!=M && STM<50) {
   		STM++
   		tID=setTimeout("pon()",100);
   		return 0
   	} 
   }
   var x=s%10,g=e-s,D=Ds[u],t=e%10,n=1+(N>>1),l="abcdefgh"
   dstr=l.charAt(x-1)+((s-x)/10-1)+(E?'x':'-')+l.charAt(t-1)+((e-t)/10-1)+(c?'+':'')
   Df((M?'     ':(n<10?" ":"")+n+'.  ')+dstr)
   msg('', dstr);
   if (c) msg('2','Check!'); 
   if(Sf(1,8-M,s,e,K)<-400)fy(c)
   if((E&7)==6){
      fy(1);
      return 0;
   }
   Rh[N]=[R.toString(),KL.toString(),K]
   K=0
   if(a==1){
      if(R[e+D]>15)R[s]+=4-b
      if(g==2*D&&(R[e-1]&1||R[e+1]&1))K=s+D
      if(!E&&g%10)Sh(e,e-D)
   }
   if(s==21+u*70||s==28+u*70)KL[u]&=(x<5)+1
   if(e==21+u*70||e==28+u*70)KL[!u]&=(x<5)+1
   if(a==6){
      if(g*g==4)Sh(s-4+(s<e)*7,s+g/2)
      KL[u]=0
   }
   if (!J&&!c) {
   	if(Sf(0,M,s,e,K)>400)c=1
   	if (c){
   		msg('', dstr+"+");
   		msg('2','Check!');
   	} 
   	if(Sf(1,8-M,s,e,K)<-400)fy(c)
   }
   Sh(s,e)
   H()
   N++
   M=8-M
   return 1
}

//  ---------------------------------------

function fy(c){
   if (c) {
   		var cm='Checkmate!'
   		Df(cm);
   		msg('2',cm); 
   		alert(cm)
   }
   J=c++
}

//  ---------------------------------------

function H(){
   var z=99,Q
   s0=(N<32)?4-(N>>3):(N>64)
   G[0]=[]
   G[8]=[]
   kY=[]
   pY=[[],[]]
   for(;z>20;z--){
      a=R[z]
      if(a&7)G[a&8][G[a&8].length]=[a,z]
      Y[z]=bY[z]*s0
      kY[z]=(N>40)||(10-2*bY[z])*s0
      Q=pY[1][119-z]=pY[0][z]=PY[z]
      if (N<7 && z>40){
         pY[0][z]=pY[1][119-z]=Q+(Math.random()*Y[z])|1
         Y[24]=Y[94]=29
      }
   }
}

//  ---------------------------------------

function Pz(U,K,b){
   var W,X,h,E,a,v,n,k=-1,u=U>>3,V=U^8,D=Ds[u],w=[],m,T,p=pY[u],H,d=KL[u],z,c,g,e=G[U],f=e.length,B=R,J=j
   for (z=0;z<f;z++){
      W=e[z][1]
      a=B[W]
      if (e[z][0]==a){
         a&=7
         if(a>1){
            c=a==6
            H=c?kY:Y
            T=b-H[W]
            n=MV[a]
            if(a==3||c){
               for(v=0;v<8;){
                  X=W+n[v++]
                  E=B[X]
                  if(!E||(E&24)==V){
                     w[++k]=[T+J[E]+H[X],W,X]
                  }
               }
               if(c&&d){
                  if(d&1&&!(B[W-1]+B[W-2]+B[W-3])&&CH(W-2,V,D,-1))w[++k]=[T+11,W,W-2]
                  if(d&2&&!(B[W+1]+B[W+2])&&CH(W,V,D,1))w[++k]=[T+12,W,W+2]
               }
            }
            else{
               g=n.length
               for(v=0;v<g;){
                  E=0
                  m=n[v++]
                  X=W
                  while(!E){
                     X+=m
                     E=B[X]
                     if(!E||(E&24)==V){
                        w[++k]=[T+J[E]+H[X],W,X]
                     }
                  }
               }
            }
         }
         else{
            T=b-p[W]
            X=W+D
            if(!B[X]){
               w[++k]=[T+p[X],W,X]
               if(!p[W]&&(!B[X+D])){
                  w[++k]=[T+p[X+D],W,X+D,X]
               }
            }
            if(K&&(K==X+1||K==X-1))w[++k]=[T+p[X],W,K]
            for(h=X-1;h<X+2;h+=2){
               E=B[h]+U
               if(E&7&&E&8){
                  w[++k]=[T+J[E]+p[h],W,h]
               }
            }
         }
      }
   }
   return w
}

//  ---------------------------------------

function CH(W,V,D,T){
   var X,E,x,m,S=W+3,a=D+2,k=MV[3],B=R
   for(;W<S;W++){
      for(m=D-2;++m<a;){
         E=B[W+m]
         if(E&&(E&8)==V&&((E&8)==1||(E&7)==6))return 0
         E=0
         X=W
         while(!E){
            X+=m
            E=B[X]
            if((E==V+2+(m!=D)*2)||E==V+5)return 0
         }
      }
      for(z=0;z<8;)if(B[W+k[z++]]-V==3)return 0
   }
   E=0
   W-=3
   while(!E){
      W-=T
      E=B[W]
      if(E==V+2||E==V+5)return 0
   }
   return 1
}

//  ---------------------------------------

function B(Q){
   var a=R[Q],p='PI'
   if(J) return 1
   msg('2',''); 
   if(q==Q&&I){
      O(p,0)
      O(q,I,1)
      I=0
      return 1
   }
   if(a&&M==(a&8)){
      if(I)O(q,I,1)
      I=a
      q=Q
      O(q,I,1)
      O(p,a)
      return 0
   }
   if(I){
      if(mv(q,Q,document.FF.h.selectedIndex)){
         O(p,0)
         I=0
         if(!J){
         	STM=0
            var t=Z(2,M,0,BE,BE,Al,Bt,K)
            if (!mv2(t[1],t[2],0)) {
            	fy(1);
            	return 1
            }
            mv(t[1],t[2],0)
         }
      }
   }
   return 1
}

//  ---------------------------------------

function Sh(s,e){
   var a=R[s]
   R[e]=a
   R[s]=0
   O(s,0,1)
   O(e,a,1)
}

//  ---------------------------------------

function Df(x){
   document.FF.b.value+='\n '+x
}

//  ---------------------------------------

function Rf(a){
   msg('2','');   	
   P=a
   for(var z=0;z<BE;z++)if(R[z]<16)O(z,R[z],1)
   if(P!=M){
      STM=0
      Tt=Z(2,M,0,BE,BE,Al,Bt,K)
      mv(Tt[1],Tt[2],0)
   }
}

//  ---------------------------------------

function SWP(a){
   if (N) {
      alert("You can swap only in the beginning!");
      return;
   }
   Rf(a)
}
//  ---------------------------------------

function Gb(){
   if(N<2) return;
   N--;
   if (P==M) N--; else M=8-M;
   var b=Rh[N]
   R=eval("["+b[0]+"]")
   KL=eval("["+b[1]+"]")
   Df(' --undo--')
   K=b[2]
   Rf(P) //Rf(M) was
   H()
   J=0
   I=0
   msg('',"Undo") 
}

//  ---------------------------------------

function O(x,y,z){
   if((A||x!='PI')&&z)x="i"+(P?119-x:x)
   if (x!='PI') {
   		document.images[x].src='../../drazen/chess/Images/'+y+'.gif'
   		document.images[x].className="w1";
   }
}

//  ---------------------------------------

function draw(){
h='<table border="0" cellpadding="2" class="t">'
for(y=90;y>10;y-=10){
   h+="<tr>"
   for(x=0;x<10;x++){
      z=y+x
      if(x&&x<9){
         h+=('<td class="'+(x+(y/10)&1?'b':'w')+'"><a href="#"><img src="../../drazen/chess/Images/0.gif" width="32" height="32" name="i'+z+'" border="0" onclick="if(!B(P?119-'+z+':'+z+')) {this.className=\'w2\';} else {this.className=\'w1\';}"></a></td>\n')
      }
   }
   h+='</tr>\n'
}

//  ---------------------------------------

h+='</table>'
document.getElementById('ploca').innerHTML=h
Rf(0)
}

function ct() {
	document.FF.b.value=''
	msg('', '');
	msg('2',''); 
   
}