var timon=0.5;function knightPath(rows,func_adj,kamb){this.rows=rows;this.size=rows*rows;this.kam=document.getElementById(kamb);this.lists=func_adj(rows);this.path=new Array(this.size)};knightPath.prototype.grad=function(node){var count=0;for(var i=0,n=this.lists[node].length;i<n;i++)if(!this.path[this.lists[node][i]])count++;return count};knightPath.prototype.find_path=function(square,depth){this.path[square]=depth;if(depth==this.size){this.on_board(timon);if(this.rows<11)this.draw();throw"done";}var lad=this.lists[square];var ln=lad.length;for(var x=0;x<ln-1;x++)for(var y=x+1;y<ln;y++)if(this.grad(lad[x])>this.grad(lad[y])){var aux=lad[x];lad[x]=lad[y];lad[y]=aux}for(var i=0;i<ln;i++){var next_sq=lad[i];if(!this.path[next_sq])this.find_path(next_sq,depth+1)}this.path[square]=0};knightPath.prototype.draw=function(){var cnv=document.getElementById("myCanvas");if(!cnv)return;cnv.innerHTML='';var jg=new jsGraphics(cnv);var rows=this.rows;var n=this.path.length;var dist_px=50;jg.setColor("#FF0000");for(var i=0;i<rows;i++)for(var j=0;j<rows;j++){jg.drawRect(j*dist_px,i*dist_px,20,20)}var tu_sq={};for(var i=0;i<n;i++)tu_sq[this.path[i]]=i;var sq1,l1,c1,sq2,l2,c2;for(var i=1;i<n;i++){jg.setColor("#0000FF");sq1=tu_sq[i];c1=parseInt(sq1/rows);l1=sq1%rows;sq2=tu_sq[i+1];c2=parseInt(sq2/rows);l2=sq2%rows;jg.drawLine(l1*dist_px+10,c1*dist_px+10,l2*dist_px+10,c2*dist_px+10);jg.setColor("#000000");jg.drawStringRect(""+i,l1*dist_px,c1*dist_px+1,20,"center")}sq1=tu_sq[1];c1=parseInt(sq1/rows);l1=sq1%rows;sq2=tu_sq[n];c2=parseInt(sq2/rows);l2=sq2%rows;jg.drawStringRect(""+n,l2*dist_px,c2*dist_px+1,20,"center");jg.setColor("#0000FF");jg.setStroke(2);jg.drawRect(l1*dist_px,c1*dist_px,20,20);jg.drawRect(l2*dist_px,c2*dist_px,20,20);jg.paint()};function adj_rows(n){var L=new Array();for(var i=0,N=n*n;i<N;i++){L[i]=new Array();var r1=parseInt(i/n);var c1=i%n;for(var j=0;j<N;j++){var r2,c2,a1,a2;r2=parseInt(j/n);c2=j%n;a1=r1>r2?r1-r2:r2-r1;a2=c1>c2?c1-c2:c2-c1;if(((a1==2)&&(a2==1))||((a1==1)&&(a2==2)))L[i].push(j)}}return L};function adj_jumps(n){var L=new Array();var jumps=[[1,2],[2,1],[-1,2],[2,-1],[-2,1],[1,-2],[-1,-2],[-2,-1]];for(var i=0;i<n;i++)for(var j=0;j<n;j++){var ind=i*n+j;L[ind]=new Array();for(var k=0;k<8;k++){var i1=i+jumps[k][0];if((i1>=0)&&(i1<n)){var j1=j+jumps[k][1];if((j1>=0)&&(j1<n))L[ind].push(i1*n+j1)}}}return L};function adj_jumps_clock(n){var L=new Array();var jumps=[[-1,-2],[-2,-1],[-2,1],[-1,2],[1,2],[2,1],[2,-1],[1,-2]];for(var i=0;i<n;i++)for(var j=0;j<n;j++){var ind=i*n+j;L[ind]=new Array();for(var k=0;k<8;k++){var i1=i+jumps[k][0];if((i1>=0)&&(i1<n)){var j1=j+jumps[k][1];if((j1>=0)&&(j1<n))L[ind].push(i1*n+j1)}}}return L};knightPath.prototype.appeTable=function(){var kamb=this.kam;var n=this.rows;var wh=n*26;var step=100/n;var ida='atdiv';kamb.innerHTML='';var atdv=document.createElement('div');atdv.setAttribute('id',ida);atdv.style.width=(wh+2)+"px";atdv.style.height=(wh+2)+"px";atdv.className="ChessBoard";kamb.appendChild(atdv);atdv=document.getElementById(ida);var dv1=document.createElement('div');dv1.style.width=""+wh+"px";dv1.style.height=""+wh+"px";dv1.style.position="relative";dv1.style.border="1px solid #CCC";for(r=0;r<n;r++){var rgt=r*step;var rid=r*n;for(c=0;c<n;c++){var dv2=document.createElement('div');var color=(r+c)&1?"BlackField":"WhiteField";dv2.className="Field "+color;var did=rid+c;dv2.setAttribute("id",""+did);var lft=c*step;dv2.style.left=""+lft+"%";dv2.style.top=""+rgt+"%";dv1.appendChild(dv2)}}atdv.appendChild(dv1)};knightPath.prototype.on_board=function(sec){var self=this;this.appeTable();var temp=1000*sec;var tour={};for(var i=0;i<this.size;i++)tour[this.path[i]]=i;var my=this.size;var mkk=this.rows>10?true:false;document.getElementById(tour[1]).innerHTML="<div class='Piece knight' title='start (1)'></div>";do_settimeout(2);document.getElementById(tour[my]).setAttribute('title','end ('+my+')');function do_settimeout(i){var nsq=tour[i];var ndv=document.getElementById(""+nsq);ndv.innerHTML="<div class='Piece knight'></div>";if(i<my&&!self._stopped){setTimeout(function(){ndv.innerHTML="<div class='dmkn' onclick='setbold("+tour[i+1]+");'>"+(mkk?"x":i)+"</div>";do_settimeout(i+1)},temp)}}};var sqBold=[];function setbold(sq){while(sqBold.length>0){var sq1=sqBold.pop();var p=document.getElementById(""+sq1);delClass(p,"setbold")}var pr=document.getElementById(""+sq);if(pr){addClass(pr,"setbold");sqBold.push(sq)}};function delClass(el,className){if(!(el&&el.className)){return}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i]}}el.className=ar.join(" ")};function addClass(el,className){delClass(el,className);el.className+=" "+className};knightPath.prototype.stop=function(){this._stopped=true};
