// Puzz

// global move and piece arrays here**********
var pcs=new Array();
var pcNames=new Array('e','p','n','b','r','q','k');
var curSet='KQBNRP'
var info='?';
var inf='?';

// pawn move Flags*********
var ep=0;

// Castling******
var wshp=1;
var wlgp=1;
var bshp=1;
var blgp=1;

// move building etc. **********
var mov;
var sve;
var temp;
var temPc=0;
var svePc=0;
var curPc=0;
var proPc=0;

// selection control *****
var prev;
var prevFlag=0;
var timr;
var obj;
var saved='';
var blink=0;

// global flow and logic control***********
var solphase=0;
var cp=0;
var wtm=1;

// position storage ***
var epd='?';
var qpd='?';  
var zpd='?';
var spd='?';

// process control flags***
var btnFlag=0;// is board click recognized?
var znr =0;// total # of puzzles
var tme=0; // main clock tick
var tmr; // main tick timer
var mst=''; // aux storage for message strings
var sst=''; // aux storage for message strings
var trycnt=0;// # of wrong tries 

// misc.***

var ns = ( navigator.appName.indexOf ("Netscape")>-1); // sniff,sniff..


//*************** Start& Stop Utilities ******************


function getqpd(){
var rv=0;
if(qpd.length>14){zpd=parsepd(qpd)}
if(zpd!='?'){rv=1}
inf=info;
return rv;
}


function getclip(){
var rv=0;var tst='?';
if (window.clipboardData){
	st=clipboardData.getData('Text');
	if (st.length<14){return rv};
	rws=st.split('\n');
	for (var i in rws){
		tst=rws[i];
		if (tst.length>=2){inf=tst;if(rv>0){break}};
		tst=parsepd(tst);
		if (tst !='?'){zpd=tst;rv=1;}
		}// for
	}// if
return rv;
}

function parsepd(st){
var j=1; var k=0; var e=0; var rt='?'; var v=0;var ch='w';
tpd=st.split('/'); 
if (tpd.length != 8){return rt}
while (j<65){
	if (k>st.length){break;}
	q=st.charAt(k++);
	if ((q==' ')&&(e>6)){break;}
	if ((q>'0')&&(q<'9')){rt+=q;j+=parseInt(q);continue;}
	if ((q=='p')+(q=='n')+(q=='s')+(q=='b')+(q=='r')+(q=='q')+(q=='k')
 	+ (q=='P')+(q=='N')+(q=='S')+(q=='B')+(q=='R')+(q=='Q')+(q=='K')){rt+=q;j++;continue;}
	if (q=='/'){rt+=q;e++;continue;}
	rt='';j=1;continue;
	}// while
if ((e==7)&&(j>=64)){
	while (k<=st.length){
		q=st.charAt(k++);
		if (v==0){
			if (q==' '){continue;}
			ch='w';
			if (q=='b'){ch='b'}
			rt+=' '+ch+' ';v=1;e=0;continue;
			}// v=0
		if (v==1){
			if ((q==' ')&&(e==0)){continue;}
			if ((q=='-')&&(e==0)){rt+='- ';v=2;continue;}
			if (((q==' ')&&(e>0))+(e>3)){rt+=' ';v=2;continue}
			if ((q=='K ')&&(e<4)){rt+='K';e++;continue;}
			if ((q=='Q')&&(e<4)){rt+='Q';e++;continue;}
			if ((q=='k')&&(e<4)){rt+='k';e++;continue;}
			if ((q=='q')&&(e<4)){rt+='q';e++;continue;}
			}//v=1
		if (v==2){
			if (q==' '){continue;}
			if ((q>='a')&&(q<='h')){rt+=q;v=3;break;}
			rt+='-';v=3;break;
			}//v=2
	}// while
	if (v==0){rt+=' w KQkq -';}
	if (v==1){rt+='KQkq -';}	
	if (v==2){rt+='-';}
	return rt;
	} //if
rt='?'; return rt;
}// parsepd



//*********** Utilities for Board setup here*************
/*
var gifs=new Array();
function preload(){
var siz=35;
var j; var k=1;
for (j=1;j<7;j++){
gifs[k]=new Image(siz,siz);
gifs[k++].src="w"+pcNames[j]+".gif";}
for (j=1;j<7;j++){
gifs[k]=new Image(siz,siz);
gifs[k++].src="b"+pcNames[j]+".gif";}
gifs[k]=new Image(siz,siz);
gifs[k].src="e.gif";
}
preload();
*/

function update(){
for (k=1;k<65;k++){
	q=document.getElementById('i'+k);
	p=pcs[k];
	if (p>0) {q.src='w'+pcNames[p]+'.gif';}
	if (p<0) {p=-p; q.src='b'+pcNames[p]+'.gif';}
	if (p==0) {q.src='e.gif';}
	}// for
}

function clrbrd(){
for (k=1;k<65;k++){
	pcs[k]=0;}
update();
}

function inibrd(){
var ini=new Array(4,2,3,5,6,3,2,4);
for (k=1;k<9;k++){
	pcs[k]=-ini[k-1];
	pcs[8+k]=-1;
	pcs[48+k]=1;
	pcs[56+k]=ini[k-1];}
	for (k=17;k<49;k++){pcs[k]=0;}
update();
}

function epd2brd(){
var j=1; var k=0; var e=0;
if (epd==null){epd=' '};
while (j<65){
if (k>epd.length){break;}
q=epd.charAt(k++);
while ((q>'0')&&(q<'9')){pcs[j++]=0;q--;}
	if (q=='p'){pcs[j++]=-1;}
	if (q=='n'){pcs[j++]=-2;}
	if (q=='s'){pcs[j++]=-2;}
	if (q=='b'){pcs[j++]=-3;}
	if (q=='r'){pcs[j++]=-4;}
	if (q=='q'){pcs[j++]=-5;}
	if (q=='k'){pcs[j++]=-6;}
	if (q=='P'){pcs[j++]=1;}
	if (q=='N'){pcs[j++]=2;}
	if (q=='S'){pcs[j++]=2;}
	if (q=='B'){pcs[j++]=3;}
	if (q=='R'){pcs[j++]=4;}
	if (q=='Q'){pcs[j++]=5;}
	if (q=='K'){pcs[j++]=6;}
	}// while
while (k<= epd.length){
	q=epd.charAt(k);
	if (q==' '){ k++;continue;}
	if (e==0){ if (q=='w'){wtm=1;}
	if (q=='b'){wtm=0;}
	k++;e++;continue;
	}
	if (e==1){
	if (q=='K'){wshp=1;k++;continue;}
	if (q=='Q'){wlgp=1;k++;continue;}
	if (q=='k'){bshp=1;k++;continue;}
	if (q=='q'){blgp=1}
	if (q=='-'){wshp=0;wlgp=0;bshp=0;blgp=0;}
	k++;e++; continue;
	}
	if (e==2){
	if (q=='-'){ep=0;break;}
	if ((q< 'a')+(q> 'h')){k++;continue;}
	if (wtm){
		if (q=='a'){ep= 17;}
		if (q=='b'){ep= 18;}
		if (q=='c'){ep= 19;}
		if (q=='d'){ep= 20;}
		if (q=='e'){ep= 21;}
		if (q=='f'){ep= 22;}
		if (q=='g'){ep= 23;}
		if (q=='h'){ep= 24;}
		}
	if (!wtm){
		if (q=='a'){ep= 41;}
		if (q=='b'){ep= 42;}
		if (q=='c'){ep= 43;}
		if (q=='d'){ep= 44;}
		if (q=='e'){ep= 45;}
		if (q=='f'){ep= 46;}
		if (q=='g'){ep= 47;}
		if (q=='h'){ep= 48;}
		}
	break;
	}// if(e==2)																																	
	} // while
update();
}

function brd2epd(){
var pc;var ec=0; var st='';
epd='';
for (var k=1;k<65;k++){
	q=pcs[k];
	if (q==-6){pc='k';}
	if (q==-5){pc='q';}
	if (q==-4){pc='r';}
	if (q==-3){pc='b';}
	if (q==-2){pc='n';}
	if (q==-1){pc='p';}
	if (q==6){pc='K';}
	if (q==5){pc='Q';}
	if (q==4){pc='R';}
	if (q==3){pc='B';}
	if (q==2){pc='N';}
	if (q==1){pc='P';}
	if (q==0){ec++;}
	if (k%8==0){ //hit the border..
		if (ec>0){epd+=ec;ec=0;}
		if (q!=0) {epd+=pc;}
		if (k!=64){epd+='/';}
		} // if border
	if (k%8!=0) { // not in the border..
		if((ec>0)&&(q!=0)){epd+=ec;ec=0;}
		if (q!=0){epd+=pc;}
		} // if no border
	} // for
epd+=' ';
if (wtm) {epd+='w ';}
if (!wtm) {epd+='b ';}
st='';
if (wshp){st+='K';}
if (wlgp){st+='Q';}
if (bshp){st+='k';}
if (blgp){st+='q';}
if (st==''){st='-';}
epd+=st+' ';
if (ep==0) {epd +='- ';}
else {epd += (coords(ep)).charAt(0)+(coords(ep)).charAt(1)+' ';}
return epd;
}// brd2epd


function chkpcas(){
if (pcs[61]!=6){wshp=0;wlgp=0;}
if (pcs[64]!=4){wshp=0;}
if (pcs[57]!=4){wlgp=0;}
if (pcs[5]!=-6){bshp=0;blgp=0;}
if (pcs[8]!=-4){bshp=0;}
if (pcs[1]!=-4){blgp=0;}
}



//'''''''''''''' Building Instructions''''''''''''
var elms=new Array();

function buildboard(p,s){
q=document.createElement("TABLE");
w=document.createElement("TBODY");
q.cellSpacing=0;
q.cellPadding=0;
q.border=1;
q.id="brd";
for (var i=0;i<8;i++){
	w1=document.createElement("TR");
	for (var j=1;j<9;j++){
		w2=document.createElement("TD");
		w2.bgColor=p;
		w2.align='center';
		if ((i+j)%2==0) {w2.bgColor=s;}
		w3=document.createElement("IMG");
		k=8*i+j;
		w3.id='i'+k;
		w3.src="e.gif";
		w2.appendChild(w3);
		w1.appendChild(w2);
		} //of j
	w.appendChild(w1);
	} // of i
q.appendChild(w);
return q;
}// of buildboard

function buildbrd(){return buildboard('lightyellow','burlywood')}


function buildprompcs(PcColor){
var w1=document.createElement("TABLE");
var w2=document.createElement("TBODY");
w1.border=1;
w1.id=PcColor+"pcs";
for(var i=2;i<6;i++){
	var w3=document.createElement("TR");
	var w4=document.createElement("TD");
	var w5=document.createElement("IMG");
	w4.align='center';
	w4.bgColor="khaki"	
	w5.id=PcColor+i;
	w5.src=PcColor+pcNames[i]+".gif";
	w4.appendChild(w5);
	w3.appendChild(w4);
	w2.appendChild(w3);
	}// of for
w1.appendChild(w2);
return w1;
} // of buildprompcs

function buildBtns(BtnsId,len){
w1=document.createElement("TABLE");
w2=document.createElement("TBODY");
w1.border=0;
w1.id=BtnsId;
w1.cellPadding=0;
for(var i=1;i<len+1;i++){
	w3=document.createElement("TR");
	elms[i]=document.createElement("TD");
	elms[i].id=BtnsId+i;
	w3.appendChild(elms[i]);
	w2.appendChild(w3);
	}// of for
w1.appendChild(w2);
return w1;
}//of buildBtns

function setBtn(k,txt,BtId){
p=elms[k];
p.style.width=84;//90
p.style.height=32;//35
p.align='center';
p.style.backgroundColor='transparent';
q=document.createElement("FORM");
p.appendChild(q);
r=document.createElement("INPUT");
r.id=BtId+k;
r.type='button';
r.style.width=80;
r.style.height=30;
r.style.align='center';
r.style.verticalAlign='middle';
if (!ns){
	r.style.position='relative';
	r.style.top=3;
	}
r.style.color='brown';
// r.style.backgroundColor='lightyellow'//'burlywood';
r.style.backgroundColor='lightyellow';
r.style.borderWidth= 'thin';
r.style.borderColor= "burlywood";
r.style.borderStyle="double";
r.style.font='10pt arial bold';
r.value=txt;
q.appendChild(r);
}

function buildPad(cl,ro){
q=document.createElement("FORM");
q.id='fa';
q.name='fa';
p=document.createElement("TEXTAREA");
p.id='ta';
p.name='ta';
p.cols=cl;
p.rows=ro;
p.style.font='10pt arial ';
p.style.color='brown';
p.style.backgroundColor='lightyellow';
q.appendChild(p);
return q;
}

function savepad(){
var x;
q=document.getElementById('ta');
if (q!=null){x=q.value;}
return x
}

function shwpad(x){
q=document.getElementById('ta');
if (q!=null){q.value=x;}
}

function wrpad(s){
q=document.getElementById('ta');
if (q!=null){q.value=q.value+s}
}

function buildMbox(bid,w,h){
q=document.createElement("DIV");
q.id=bid;
q.style.color='brown';
q.style.font='10pt arial bold';
q.style.backgroundColor='lightyellow';
q.style.borderWidth= 'thin';
q.style.borderColor= "burlywood";
q.style.borderStyle="solid";
q.style.width=w;
q.style.height=h;
p=document.createTextNode(' ');
q.appendChild(p);
return q
}

function setbulb(c){
q=document.getElementById('ubulb');
if (q!=null){
	if (c==1){q.style.backgroundColor='green';}
	if (c==2){q.style.backgroundColor='yellow';}
	if (c==3){q.style.backgroundColor='red';}
	}
}

function getbulb(){
var c=0;
q=document.getElementById('ubulb');
if (q!=null){
	if (q.style.backgroundColor=='green'){c=1};
	if (q.style.backgroundColor=='yellow'){c=2};
	if (q.style.backgroundColor=='red'){c=3};
	}
return c;
}

function msg(s){
q=document.getElementById('mbox');
if (q!=null){
	q.align='center';
	q.firstChild.nodeValue=s;
	}
}

function cntdwn(x){
q=document.getElementById('r1');
if (q!=null){q.value=movno}	
}

function buildTbox(w){
q=document.createElement("FORM");
q.id='tb';
q.name='tb';
p=document.createElement("INPUT");
p.id='pos';
p.style.backgroundColor='lightyellow';
p.style.color='brown';
p.name='pos';
p.type='text';
p.size=w;
q.appendChild(p);
return q;
}


function setElm(x,q){
var v=document.getElementById(x);
if (v!=null){v.appendChild(q);}
}

function clrDiv(x){
var v=document.getElementById(x);var r;
if (v!=null){while ((r=v.firstChild)!=null){v.removeChild(r);}}
}

function clrElms(){
for (var i=2;i<5;i++){
	clrDiv('d'+i);
	}	
}

function clrAlms(){
clrDiv('d1');
clrElms();
}

function buildlayout(){
var q=document.createElement("DIV");
q.id='d0';
q.style.position='absolute';
q.style.left='0px';
q.style.top='0px';
//q.onkeyup=keycheck
q.onclick=mclick
q.onmousedown=mdwn
q.style.backgroundColor="transparent";
var p=document.createElement("DIV");
p.id='d1';
p.style.position='absolute';
p.style.left='10px';
p.style.top='10px';
q.appendChild(p);
p=document.createElement("DIV");
p.id='d2';
p.style.position='absolute';
p.style.left='320px';
p.style.top='10px';
q.appendChild(p);
p=document.createElement("DIV");
p.id='d3';
p.style.position='absolute';
p.style.left='10px';
p.style.top='320px';
q.appendChild(p);
p=document.createElement("DIV");
p.id='d4';
p.style.position='absolute';
p.style.left='270px';
p.style.top='320px';
q.appendChild(p);
document.body.style.backgroundColor="transparent";
document.body.appendChild(q);
}


////---- Building Layouts ----/////

function qinit(){buildlayout();buildPuzz();return}

function rinit(){
znr=getqpd();
if(znr==0){znr=getclip();}
if(znr==0){buildPrompt();return}
if(znr==1){buildPuzz();return}
}


function buildPrompt(){
clrAlms(); solphase=0;
var q=buildPad(30,10);setElm('d1',q);
q=buildTbox(30);setElm('d1',q);
var v=document.getElementById('pos');
v.focus();
q=buildBtns('ggg',1);
setElm('d2',q);
setBtn(1,'Go','g');
shwpad(' No puzzles loaded.\n No valid EPDs found!');
wrpad('\n\nPlease paste a valid EPD below \n and try again with "Go" -button.');
return
}

function buildPuzz(){
clrAlms(); solphase=1;
var q= buildbrd(); setElm('d1',q);
//q=buildMbox('cbox',80,30); setElm('d2',q);
q=buildBtns('rrr',2); setElm('d2',q);
setBtn(1,movno,'r');
setBtn(2,'Reset','r');
q=buildMbox('mbox',250,40); setElm('d3',q);
q=buildMbox('ubulb',40,20); setElm('d4',q);
trycnt=0;tme=0;
startpuzz();
tmr=setInterval('tick()',1000);
return
}


function buildRes(){
clrAlms();solphase=3;
var q=buildPad(30,16); setElm('d1',q);
q=buildBtns('sss',1);setElm('d2',q);
setBtn(1,'Back','s');
shwres(); 
return
}

function startpuzz(){
reset();
movno=24;
cntdwn(movno);
setbulb(1);
msg('Treasure Hunt');
if (trycnt>0){msg('Try again...');}
}

function tick(){
tme++;
}


 
//'''''''''''''' Move Handling '''''
//** cp=0 ***

function pcselect(q){
if (blink){return};
blink=1;
obj=q;
saved=q.src;
timr=setInterval('swap()',250);
}

function swap(){
if (obj.src==saved){obj.src='e.gif';}
else {obj.src=saved;}
}

//*** cp=1****

function unselect(){
if (!blink){return}
blink=0;
clearInterval(timr);
if (obj!=null){obj.src=saved;}
}

function makemove(){
unselect();
decode();
pcs[sve]=pcs[temp];
pcs[temp]=0;
if ((temPc==1)&&(sve==ep)){pcs[ep+8]=0;}
if ((temPc==-1)&&(sve==ep)){pcs[ep-8]=0;}
if (mov==616340){pcs[64]=0;pcs[62]=4;}
if (mov==615950){pcs[57]=0;pcs[60]=4;}
if (mov==50760){pcs[8]=0;pcs[6]=-4;}
if (mov==50370){pcs[1]=0;pcs[4]=-4;}
chkpcas(); ep=0;
if ((temPc==1)&&(sve==temp-16)){ep=temp-8;}
if ((temPc==-1)&&(sve==temp+16)){ep=temp+8;}
update();
}

function decode(){
var sv=mov;
if ((isNaN(mov))+(mov >99999999)+(mov<0)){mov=0;}
if (mov==0){temp=0;sve=0;temPc=0;svePc=0;proPc=0;mov=sv;return}
while (mov<1000000){mov=mov*100;}
proPc=mov%100;mov=Math.floor(mov/100);
svePc=mov%100;mov=Math.floor(mov/100);
sve=mov%100;temp=Math.floor(mov/100);
if (temp>64){mov=sv;return}
temPc=pcs[temp]; if (temPc==0){temPc=pcs[sve];}
if (proPc>0) {temPc=1;} // resets the unpromoting pawn
if (proPc>10){temPc=-1;} 
mov=sv;
return;
}

//*** Error indication ***

function flash(x){
prevFlag=btnFlag;
prev=getbulb();
btnFlag=1;
setbulb(3);
setTimeout('warn()',x);
return
}

function warn(){
setbulb(prev);
btnFlag=prevFlag;
return
}

function encode(x){
var v='?';
if (x==1){v='a'};
if (x==2){v='b'};
if (x==3){v='c'};
if (x==4){v='d'};
if (x==5){v='e'};
if (x==6){v='f'};
if (x==7){v='g'};
if (x==0){v='h'};
return v;
}

function pcCode(q){
var pc=' ';
if (q==6){pc=curSet.charAt(0);} //'K';}
if (q==5){pc=curSet.charAt(1);} //'Q';}
if (q==4){pc=curSet.charAt(4);} //'R';}
if (q==3){pc=curSet.charAt(2);} //'B';}
if (q==2){pc=curSet.charAt(3);} //'N';}
if (q==1){pc=curSet.charAt(5);} //'P';}
return pc;
}

function coords(sq){
var rs='';
if ((sq<1)+(sq>64)){return rs;}
rs=encode(sq%8)+(9-Math.ceil((sq-0.5)/8));
return rs;
}


//''''''''''''''''''''Promotions'''''''''''''''''''

function chkprom(){

if (!btnFlag){
	clrDiv('d2');
	var c= (wtm==1)?'w':'b';
	q=buildprompcs(c);setElm('d2',q);
	msg(' Please, select a promotion');
	curPc=0;btnFlag=1;return;
	}// if !btn
if (btnFlag){
	pcs[sve]=curPc;proPc=curPc;
	if (curPc<0){proPc=10-curPc};update();
	mov=100*mov+proPc;
	clrDiv('d2');
	q=buildBtns('rrr',1); setElm('d2',q);
	setBtn(1,'Reset','r');
	btnFlag=0;cp=0;return;
	}// if btn
}// of chkprom 


//''''''''''' Event Handlers Be Here '''''''''''''


function mclick(e){
if (ns){z=e.target;} else {z=event.srcElement;}
p=z.id.charAt(0);
x=parseInt(z.id.substr(1));
solclick();
return false;
}

function solclick(){

 //**solphase=0. Prompt phase **
if (p=='g'){
	var po=document.getElementById('pos'); 
	qpd=po.value;rinit();return
	}	

 //**solphase=1. Puzzle phase - main clicks**
if ((p=='r')&&(x==1)){z.blur();return}
if ((p=='r')&&(x==2)){retry();return}

//** solphase = 3 Show single result phase**
if(p=='s'){buildPuzz();return}
	
//** (Clicking messagebox )**
if (p=='m'){ msg ('This fine program was created by mr.mip @ 2006');return}

//** Uncapture and promotion (Clicking Pallette)**
if (p=='w'){curPc=x;chkprom();chkans();return}
if (p=='b'){curPc=-x;chkprom();chkans();return}	

//** Clicking Textbox **
if ((p=='p')&&(solphase==0)){z.focus();return}


} // of solclick

//¤¤¤¤¤¤¤¤¤¤¤ MAIN BOARD CLICK SERVICE ¤¤¤¤¤¤¤¤¤

function mdwn(e){
if (ns){qq=e.target;} else {qq=event.srcElement;}
p=qq.id.charAt(0); 
if (p=='i'.charAt(0)){
	x=parseInt(qq.id.substr(1));
	if (solphase==1){soldwn(x);}
	}
return false;
}

function soldwn(x){
if (btnFlag){msg('The board is not currently active');return}
p=pcs[x];

//***  the first click of a new move ***
if (cp==0){ 
	if (p==0){msg('No piece selected!');flash(200);return}
	if ((p<0)&&(wtm==1)){msg('It is white to move!');flash(200);return}
	if ((p>0)&&(wtm==0)){msg('It is black to move!');flash(200);return}
	temp=x;temPc=p;
	mov=x;pcselect(qq);cp=1;return
	}//cp0

 //*** Here's to a second click ***
if (cp==1){
	sve=x;svePc=p;var svPc=svePc;
	if (sve==temp){unselect();cp=0;msg ('Selection canceled');flash(200);return}
	if (((temPc>0)&&(svePc>0))+((temPc<0)&&(svePc<0))){msg(' Cannot capture your own piece!');flash(200);return}
	if ((svePc==6)+(svePc==-6)){msg(' Cannot capture a king!');flash(200);return}
	//**the essence of legality check
	if (svePc<0){svPc=10-svePc;}
	mov=10000*temp+100*sve+svPc;
	if (mov==616300){mov=616340;}
	if (mov==615900){mov=615950;}
	if (mov==50700){mov=50760;}
	if (mov==50300){mov=50370;}
	if ((temPc==1)&&(sve==ep)){mov=mov+20;}
	if ((temPc==-1)&&(sve==ep)){mov=mov+30;}
	if (!kovok(temp,sve)){msg('Illegal move !');flash (200);return}//*********
	makemove();
	//if ((temPc==1)&&(sve<9)){chkprom();}	
	//if ((temPc==-1)&&(sve>56)){chkprom();}	
	//if (btnFlag){return};
	cp=0; 
	chkans();
	return
	} // of cp=1

}//soldwn

//******************Utilities for button clicks**************

function clrall(){
mov=0;temp=0;sve=0;cp=0;btnFlag=0;
temPc=0;curPc=0;svePc=0;proPc=0;
}

function reset(){
unselect();
//epd=zpd;
//epd2brd();
setgold();//*****
setpos();//********
clrall();
return
}

function retry(){
//trycnt++;
startpuzz();
return
}

//''''''''''''Checking solution ''''''''''''''''''''''''''

function chkans(){
var x=0;var st='';
getparms();
st=chkend();
if(st!=''){msg(st);btnFlag=1;return}
msg('Now let me think...');
if(wkr>bkr){
	x=getright();if(x==0){x=noright();}
	}
if(wkr==bkr){
	x=geteq();if(x==0){x=noeq();}
	}
if(wkr<bkr){
	x=getleft();if(x==0){x=noleft();}
	}
shwit(x);
return
}


function shwres(){
var st='';
shwpad(' ');
st+='\n*You have solved this problem!\n';
st+='\n*You used '+tme+' secs to find all answers.\n';
st+='\n*You tried '+trycnt+' times with a wrong key move.\n';
shwpad(st);
return
}


//'''''''''''' Aux Routines for Replaying ''''''''''''''''

function blinkmove(){
decode();
blinkoff();
return
}

function blinkoff(){
pcs[temp]=0;update();setTimeout('blinkon()',250);
}

function blinkon(){
pcs[temp]=temPc;update();
btnFlag++;
if (btnFlag<4){setTimeout('blinkoff()',250);return}
setTimeout('shwmove()',250);
}

function shwmove(){
btnFlag=0;
decode();
if (temp>64){return;}
if (sve==0){pcs[temp]=0;update();return}
pcs[sve]=pcs[temp];pcs[temp]=0;
if (svePc==20){pcs[sve+8]=0;}
if (svePc==30){pcs[sve-8]=0;}
if (svePc==40){pcs[64]=0;pcs[62]=4}
if (svePc==50){pcs[57]=0;pcs[60]=4}
if (svePc==60){pcs[8]=0;pcs[6]=-4}
if (svePc==70){pcs[1]=0;pcs[4]=-4}
if (proPc>10){proPc=10-proPc;}
if (proPc){pcs[sve]=proPc;}
chkpcas(); ep=0;
if ((temPc==1)&&(sve==temp-16)){ep=temp-8;}
if ((temPc==-1)&&(sve==temp+16)){ep=temp+8;}
update();setbulb(1);
msg('Your move?');cp=0;
} // of shwmove



// =============== puzzle specific code from here =====
var bkp=0;
var wkp=0;
var bkr=0;
var wkr=0;
var movno=24;

function getwkpos(){
for (var kk=1;kk<65;kk++){
if (pcs[kk]==6){return kk;}}
return 0;
}

function getbkpos(){
for (var kk=1;kk<65;kk++){
if (pcs[kk]==-6){return kk;}}
return 0;
}

function getparms(){
bkp=getbkpos();
wkp=getwkpos();
wkr=wkp%8;if(wkr==0){wkr=8;}
bkr=bkp%8;if(bkr==0){bkr=8;}
wkz=Math.floor((wkp-0.5)/8)+1;
bkz=Math.floor((bkp-0.5)/8)+1;
}

function kovok(temp,sve){
bkp=getbkpos();
var ok=0;
var x=Math.abs(temp-sve);var y=Math.abs(bkp-sve);
if((x==8)+(x==9)+(x==7)+(x==1)){ok=1}
if(ok==0){return false}
if((y==8)+(y==9)+(y==7)+(y==1)){return false}
return true;
}

function isOppo(x,y){
var xr=x%8;if(xr==0){xr=8;}
var yr=y%8;if(yr==0){yr=8;}
var xz=Math.floor((x-0.5)/8)+1;
var yz=Math.floor((y-0.5)/8)+1;
if(Math.abs(xr-yr)%2==1){return false}
if(Math.abs(xz-yz)%2==1){return false}
return true;
}

function shwit(x){
mov=10000*bkp+100*x;
bkp=x;blinkmove();
return
}

//***** Aux to Chkans*******

function chkend(){
var st='';
if((wkp==6)+(wkp==7)+(wkp==8)){
	st='Bravo! You have won the treasure. Try again with Reset.';
	return st;
	}
if(--movno<0){
	st='Sorry, computer keeps the treasure. Try again with Reset.';
	return st;
	}
cntdwn(movno);
return st;
}

function getright(){
var x=0;
if(bkp>8){x=bkp-7;if(isOppo(wkp,x)){return x}}
x=bkp+1;if(isOppo(wkp,x)){return x}
if((wkp!=bkp+16)&&(wkp!=bkp+17)&&(wkp!=bkp+18)){
	x=bkp+9;if(isOppo(wkp,x)){return x}
	}
return 0;
} 

function geteq(){
var x=0;
if(bkp>8){x=bkp-8;if(isOppo(wkp,x)){return x}}
if((wkp!=bkp+16)&&(wkp!=bkp+17)&&(wkp!=bkp+15)){
	x=bkp+8;if(isOppo(wkp,x)){return x}
	}
return 0;
} 

function getleft(){
var x=0;
if(bkp>8){x=bkp-9;if(isOppo(wkp,x)){return x}}
x=bkp-1;if(isOppo(wkp,x)){return x}
if((wkp!=bkp+16)&&(wkp!=bkp+15)&&(wkp!=bkp+14)){
	x=bkp+7;if(isOppo(wkp,x)){return x}
	}
if(bkp>8){x=bkp-8;if(isOppo(wkp,x)){return x}}
x=bkp+8;if(isOppo(wkp,x)){return x}
return 0;
}

function noright(){
if(bkp>8){return(bkp-7)}
return (bkp+1)
} 

function noeq(){
if(bkp>8){return(bkp-8)}
if(bkr<8){return(bkp+1)}
return (bkp-1)
} 

function noleft(){
if(bkp>8){return(bkp-8)}
return (bkp+8)
}

function setpos(){
clrbrd();
var x=Math.floor(Math.random()*3);
if(x==0){bkp=1;pcs[1]=-6}
if(x==1){bkp=9;pcs[9]=-6}
if(x==2){bkp=17;pcs[17]=-6}
x=Math.floor(Math.random()*3);
if(x==0){wkp=57;pcs[57]=6}
if(x==1){wkp=49;pcs[49]=6}
if(x==2){wkp=41;pcs[41]=6}
update()
}
function setgold(){
q=document.getElementById('i6');
q.style.backgroundColor='gold';
q=document.getElementById('i7');
q.style.backgroundColor='gold';
q=document.getElementById('i8');
q.style.backgroundColor='gold';
}  
