');
// t.document.close();
// StartIt();
}
StartIt();
TimeIt('Drawing Board');
if(swapable){
var m=new Array('wp','wb','wn','wr','wq','wk','bp','bb','bn','br','bq','bk','clr');
for(var t in m){
G[m[t]]=new Image();
G[m[t]].src=m[t]+'.gif';
}
if(location.search!='') pix=parseInt(location.search.substring(1));
var dim=' width=' +pix+ ' height=' +pix;
document.write('
\n');
}else document.write("A NN3 or IE4 browser is required.");
TimeIt('Done drawing Board');
function Select(t){
if(t.length>=4){
//parse for garbage here
document.a.go.value=t.substring(0,2).toLowerCase();
t=t.substring(2);
document.a.go.focus();
}
if(document.a.go.value!=''){
var f=document.a.go.value.toLowerCase();
document.a.go.value='';
if(B[A2N[f]]!=-1){
if((inCheck && outOfCheck[B[A2N[f]]][A2N[t]]) ||
(!inCheck && P[B[A2N[f]]].iSeeIt[A2N[t]]>0)){
TimeIt('Just selected');
move(A2N[f],A2N[t],true);
TimeIt('Done Moving');
changeWhoIsUp();
TimeIt('Done changeWhoIsUp');
TellAllAboutIt();
}
}
}else if(B[A2N[t]]!=-1 && P[B[A2N[t]]].who==whoIsUp) document.a.go.value=t;
return;
}
function changePlayerType(who){
var human=(document.a[(who==0?'darkplayer':'lightplayer')].selectedIndex==0);
Human[who]=human;
if(whoIsUp!=who) return;
if(!human){
whoIsUp=(whoIsUp==0?1:0);
changeWhoIsUp();
}
}
function changeWhoIsUp(){
whoIsUp=(whoIsUp==0?1:0);
outOfCheck=new Array();
var found=false;
var tx='';
if(amIInCheck(whoIsUp)){
tx+='I ('+whoIsUp+') am in check!\n';
P[K[whoIsUp]].isChecked=true;
P[K[whoIsUp]].beenChecked=true;
for(var i in H[whoIsUp]){
var p=P[H[whoIsUp][i]];
if(p.isDead) continue;
tx+='Looking at '+p.type+' located at '+N2A[p.pos]+'\n';
for(var j=0;j<64;j++){ // this could probably be "in"
var val=p.iSeeIt[j];
if(!val || val<0) continue;
var VIS=Vis;
Vis=false;
move(p.pos,j,true,'//noReCompute;');
if(!amIInCheck(whoIsUp,'confirmMove')){
tx+='Good move to '+N2A[j]+'\n';
found=true;
if(!outOfCheck[p.id]) outOfCheck[p.id]=new Array();
outOfCheck[p.id][j]=val+100;
}
unmove();
Vis=VIS;
}
}
inCheck=true;
}else inCheck=false;
tx+='Done Changing Who is Up\n';
//alert(tx);
if(Vis){
if(inCheck && !found){ document.a.whoisup.value="Check Mate"; alert("Check Mate"); return; }
else document.a.whoisup.value=(whoIsUp==0?"Dark":"Light")+"'s Turn"+(inCheck?" (in Check)":"")+' '+Un+' '+reComputes;
}
reComputes=0
if(Human[whoIsUp]){
return;
}else{
var max=0;
var from=0;
var to=0;
for(var i=0;imax){
max=p.iSeeIt[j]>max;
to=j;
from=p.pos;
}
}
}
move(from,to,true);
}
changeWhoIsUp();
}
function moveComputer(who,Avail,levelsLeft){
}
function amIInCheck(pro){
TimeIt('amIInCheck');
var ant=(pro==0)?1:0;
var KingPos=P[K[pro]].pos;
var useConfirmMove=(amIInCheck.arguments.length==2);
for(var i in H[ant]){
var p=P[H[ant][i]];
if(p.isDead) continue;
if(useConfirmMove){
if(confirmMove(p.pos,KingPos)>-1) return true;
}else{
if(p.iSeeIt[KingPos]) return true;
}
}
return false;
}
function squareColor(pos){
return Math.abs( (-1*Math.floor(pos/8+2)+pos%8)%2);
}
function confirmMove(f,t){
if(t>63 || t<0) return -1;
var p=P[B[f]];
var val=-1;
var found=false;
for(var x=0;x7) continue;
if(p.type=='k'){
if(x<=1){
if(p.isMoved || p.beenChecked) return -1;
var rook=(p.who==0)?(x==0?0:7):(x==0?56:63);
if(B[rook]!=-1 && P[B[rook]].isMoved) return -1;
var e=(p.who==0)?(x==0?[1,2,3]:[5,6]):(x==0?[57,58,59]:[61,62]);
for(var i in e) if(B[e[i]]!=-1) return -4;
val=6; // value of castling
}
}else if(p.type=='p'){
if(x==0){
if(p.isMoved && y==1) return -1;
else if(B[t]!=-1) return -4;
}else if(B[t]==-1){
var f_row=N2A[f].charAt(1);
if( (p.who==0 && f_row==4) || (p.who==1 && f_row==5) ){
if(Un==-1) return -3;
var tx=U[Un];
if(tx.indexOf('//pawn;')==-1) return -3;
tx=parseInt(tx.substring(0,tx.indexOf(',')));
var row =N2A[tx].charAt(1);
var col =N2A[tx].charAt(0);
var t_col=N2A[t].charAt(0);
if(f_row!=row || t_col!=col) return -3;
val+=p.val*10;
}else return -3;
}
}
found=true;
if(B[t]!=-1){
var r=P[B[t]];
if(r.who==p.who) return -2;
else val+=r.val*10;
}
val+=1;
}else if(B[f+p.moves[x][y]]!=-1){
barrier=true;
}else{
}
}
}
if(!found) return -1;
var tx='Checking for check ['+N2A[f]+'] alreadyChecking('+alreadyChecking+')\n';
if(!alreadyChecking && !settingUp){
alreadyChecking=true;
var VIS=Vis;
Vis=false;
tx='moving '+N2A[f]+' to '+N2A[t]+'\np.who='+p.who+'\n';
move(f,t,true,'//noReCompute;');
tx+='amIInCheck(p.who)? '+amIInCheck(p.who)+'\n';
if(amIInCheck(p.who,'confirmMove')) val=-10;
tx+='unmoving';
unmove();
Vis=VIS;
alreadyChecking=false;
}
tx+='val='+val+'\n';
//alert(tx)
return val;
}
function unmove(){
TimeIt('function unmove');
if(Un<0) return;
var u=U[Un];
Un-=1;
while(u.length>0){
var i=u.indexOf(',');
var j=u.indexOf(',',i+1);
var k=u.indexOf('|');
var f=u.substring(0,i);
var t=u.substring(i+1,(j>-1?j:k));
var e=u.substring(j+1,k);
u=u.substring(k+1);
if((''+f).indexOf('//unqueen;')==0) unQueen(1*f.substring(10),1*t,1*e);
else if(j>-1) move(1*f,1*t,false,e);
else move(1*f,1*t,false);
}
if(unmove.arguments.length>0) changeWhoIsUp();
}
function unQueen(who,where,which){
P.length-=1;
H[who]-=1;
B[where]=-1;
resurrect(which);
}
function move(f,t,addToUndo){
TimeIt('function move '+N2A[f]+','+N2A[t]);
if(B[f]==-1) alert(whoIsUp+' This is impossible '+N2A[f]+' '+N2A[t]);
var p=P[B[f]];
var dist=t-f;
var dist_abs=Math.abs(dist);
var undo='';
var a4=(move.arguments.length>3?move.arguments[3]:'');
var noReCompute=(a4.indexOf('//noReCompute;')>-1?'//noReCompute;':'');
if(p.type=='k' && dist_abs==2 && a4==''){
undo+=''+t+','+f+',M'+p.id+';'+noReCompute+'|';
var rookf=(p.who==0)?(dist<0?0:7):(dist<0?56:63);
var rookt=(p.who==0)?(dist<0?3:5):(dist<0?59:61);
undo+=move(rookf,rookt,false);
}else if(p.type=='p'
&& (dist_abs==7 || dist_abs==9)
&& a4==''
&& B[t]==-1){
var tt=t+(p.who==0?-8:8);
blankImage(tt);
P[B[tt]].isDead=true;
undo+=''+t+','+f+',R'+B[tt]+';C'+p.id+','+(p.who==0?63:0)+';'+noReCompute+'|';
}else if(B[t]!=-1){
P[B[t]].isDead=true;
undo+=''+t+','+f+',R'+B[t]+';'+(!p.isMoved?'M'+p.id+';':'')+noReCompute+'|';
B[t]=-1;
}else if(!p.isMoved && p.type=='p' && dist_abs==16){
undo+=''+t+','+f+',//pawn;M'+p.id+';'+noReCompute+'|';
}else undo+=''+t+','+f+(!p.isMoved?',M'+p.id+';':',')+noReCompute+'|';
if(!p.isMoved) p.isMoved=true;
blankImage(p.pos);
B[f]=-1;
B[t]=p.id;
p.pos=t;
while(a4.length>0){
var i=a4.indexOf(';');
var e=a4.substring(0,i);
a4=a4.substring(i+1);
if(e.charAt(0)=='/') 1;
else if(e.charAt(0)=='M') P[ (1*e.substring(1)) ].isMoved=false;
else if(e.charAt(0)=='R') resurrect( (1*e.substring(1)) );
else if(e.charAt(0)=='C'){
var i=e.indexOf(',');
reCompute((1*e.substring(1,i)),(1*e.substring(i+1)));
}
}
if(Vis) document.images[t].src=G[p.src].src;
var t_row=N2A[t].charAt(1);
if(p.type=='p' && ((p.who==0 && t_row==1) || (p.who==1 && t_row==8)) ){
var tx='Choose which piece you would like your pawn to become:\n'
+'(1) Queen (default) (2) Rook (3) Bishop (4) Knight';
var n=((Vis && Human[p.who]) ? prompt(tx,1) : 1);
var type=(n=='4') ? 'n' : (n=='3') ? 'b' : (n=='2') ? 'r' : 'q';
undo='//unqueen;'+p.who+','+t+','+p.id+'|'+undo;
p.isDead=true;
var Pid=P.length;
H[p.who][H[p.who].length]=Pid;
P[Pid]=new piece((p.who==0?'b':'w'),type,Pid,t);
P[Pid].isMoved=false;
resurrect(Pid);
p=P[Pid];
}
if(noReCompute!=''){
if(addToUndo) U[++Un]=undo;
return undo;
}
reCompute(p,0);
reCompute(p,63);
for(var i=0;i<2;i++) for(var j=0;jf)?[t-1,t+1]:[f-1,f+1]):((tto) continue;
if(p.pos>offset && p.pos-1)
t=t.substring(0,t.indexOf(R[i]))+t.substring(1+t.indexOf(R[i]));
t=t.toLowerCase();
while(t.length>0){
var g=t.charAt(0).toLowerCase();
var h=t.charAt(1).toLowerCase();
var i=A2N[t.substring(2,4)];
var j=(g=='b'?0:1);
var Pid=P.length;
H[j][H[j].length]=Pid;
P[Pid]=new piece(g,h,Pid,i);
var i=parseInt(t.charAt(4));
if(i==0||i==1) resurrect(Pid);
if(i==0||i==2) P[Pid].isMoved=false;
t=t.substring(5);
}
// Vis=false;
settingUp=true;
for(var i=0;i<2;i++) for(var j=0;j' +desc(p)+ '
');
t.document.close();
}
var descx=0;
var descmax=5;
function desc(p){
descx++;
if(descmax<=descx){ descx--; return; }
var t=''+p+'\n';
PP=eval(p);
for(var i in PP){
var pp=p;
if(''+parseInt(i) == i) pp+='['+i+']';
else pp+='.'+i;
var nodesc=(i == 'elements');
if((''+eval(pp)).toLowerCase().indexOf('object')>-1 && !nodesc) t+=desc(pp);
else t+=pp+ '=' +eval(pp)+ '\n';
}
descx--;
return '-------------\n'+t;
}
//------------------------------------------------
//-->