function generation(kolk, colorsled){

for (var i=0; i<kolk; i++) {
  pl[i] = new Array();
  for (var j=0; j<kolk; j++) {
	pl[i][j]= {};
	pl[i][j].zn = 0;
	pl[i][j].b_top = 1;
	pl[i][j].b_right = 1;
  }
}

pl[0][0].zn=1;
var x1=0;
var y1=0;
var x2 = kolk-1;
var y2=kolk-1;
var xt=x1;
var yt = y1;
var Max_kol_i=100000;
var kol_i=0;
var hod= new Array();
var tek_hod =0;

ok=0;
while (((xt!=x2) || (yt!=y2)) && (kol_i<Max_kol_i) &&(ok!=2)){
  if ((vozm_hod(xt-1,yt)&&(pl[xt][yt].b_top!=2)) || (vozm_hod(xt+1,yt)&&(pl[xt+1][yt].b_top!=2)) || (vozm_hod(xt,yt-1)&&(pl[xt][yt-1].b_right!=2)) || (vozm_hod(xt,yt+1)&&(pl[xt][yt].b_right!=2))) {
	sl_=(getrandom(1,4));
	if ((sl_==1)&&(vozm_hod(xt-1,yt))&&(pl[xt][yt].b_top!=2))
            {pl[xt][yt].b_top=0; pl[xt-1][yt].zn=1;hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++; xt=xt-1;ok=1;}; 
	if ((sl_==2)&&(vozm_hod(xt,yt+1))&& (pl[xt][yt].b_right!=2))
            {pl[xt][yt].b_right=0; pl[xt][yt+1].zn=1;hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++; yt=yt+1;ok=1;}
	if ((sl_==3)&&(vozm_hod(xt+1,yt))&&(pl[xt+1][yt].b_top!=2))
            {pl[xt+1][yt].b_top=0; pl[xt+1][yt].zn=1; hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++;xt=xt+1;ok=1;};
	if ((sl_==4)&&(vozm_hod(xt,yt-1))&&(pl[xt][yt-1].b_right!=2))
            {pl[xt][yt-1].b_right=0; pl[xt][yt-1].zn=1;hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++; yt=yt-1;ok=1;};
  }
  else {  
	// здесь попробуем создать массив с возможными ходами
	var vrem_pl = new Array();
	var nom_vrem_pl = 0;
	for (var i=0; i<kolk; i++) {
   	    for (var j=0; j<kolk; j++) {
	        if ((pl[i][j].zn==1) && ((vozm_hod(i-1,j)) || (vozm_hod(i+1,j)) || (vozm_hod(i,j-1)) || (vozm_hod(i,j+1)))) {
			vrem_pl[nom_vrem_pl] = {};
			vrem_pl[nom_vrem_pl].xt = i;
			vrem_pl[nom_vrem_pl].yt = j;
			nom_vrem_pl++;
		}	
	    }
	}
	if (nom_vrem_pl > 0) 
            {sl1=getrandom(0,nom_vrem_pl-1);xt=vrem_pl[sl1].xt;yt=vrem_pl[sl1].yt;} 
	else {kol_i=Max_kol_i};
  }
kol_i++;

}

// дальше снова заполняем
next_do = 1;
while ((next_do==1)  && (kol_i<Max_kol_i) ){
	if ((vozm_hod(xt-1,yt)&&(pl[xt][yt].b_top!=2)) || (vozm_hod(xt+1,yt)&&(pl[xt+1][yt].b_top!=2)) || (vozm_hod(xt,yt-1)&&(pl[xt][yt-1].b_right!=2)) || (vozm_hod(xt,yt+1)&&(pl[xt][yt].b_right!=2))) {
		sl_=(getrandom(1,4));
		if ((sl_==1)&&(vozm_hod(xt-1,yt))&&(pl[xt][yt].b_top!=2)){pl[xt][yt].b_top=0; pl[xt-1][yt].zn=1;hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++; xt=xt-1;ok=1;}; 
		if ((sl_==2)&&(vozm_hod(xt,yt+1))&& (pl[xt][yt].b_right!=2)){pl[xt][yt].b_right=0; pl[xt][yt+1].zn=1;hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++; yt=yt+1;ok=1;}
		if ((sl_==3)&&(vozm_hod(xt+1,yt))&&(pl[xt+1][yt].b_top!=2)){pl[xt+1][yt].b_top=0; pl[xt+1][yt].zn=1; hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++;xt=xt+1;ok=1;};
		if ((sl_==4)&&(vozm_hod(xt,yt-1))&&(pl[xt][yt-1].b_right!=2)){pl[xt][yt-1].b_right=0; pl[xt][yt-1].zn=1;hod[tek_hod]={};hod[tek_hod].xt=xt;hod[tek_hod].yt=yt;tek_hod++; yt=yt-1;ok=1;};
	}
	else {  
		// здесь попробуем создать массив с возможными ходами
		var vrem_pl = new Array();
		var nom_vrem_pl = 0;
		for (var i=0; i<kolk; i++) {
			for (var j=0; j<kolk; j++) {
				if ((pl[i][j].zn==1) && ((vozm_hod(i-1,j)) || (vozm_hod(i+1,j)) || (vozm_hod(i,j-1)) || (vozm_hod(i,j+1)))) {
					vrem_pl[nom_vrem_pl] = {};
					vrem_pl[nom_vrem_pl].xt = i;
					vrem_pl[nom_vrem_pl].yt = j;
					nom_vrem_pl++;
				}	
			}
		}
		//sl1=getrandom(1,tek_hod-1);xt=hod[sl1].xt;yt=hod[sl1].yt;tek_hod=sl1;
		if (nom_vrem_pl > 0) {sl1=getrandom(0,nom_vrem_pl-1);xt=vrem_pl[sl1].xt;yt=vrem_pl[sl1].yt;} 
		else {next_do=0; kol_i=Max_kol_i};
	}
kol_i++;

}


for (var i=0; i<kolk; i++) {
	for (var j=0; j<kolk; j++) {
		if (pl[i][j].b_right==2) {pl[i][j].b_right=1};
		if (pl[i][j].b_top==2) {pl[i][j].b_top=1};

	}
}	



}


function getrandom(min_random, max_random) {
    var range = max_random - min_random + 1;
    return Math.floor(Math.random()*range) + min_random;
}


function vozm_hod(x,y) {
	if ((x<0) || (y<0) || (x>=kolk) ||  (y>=kolk) ) {
		return false;
	}
	if (pl[x][y].zn == 0)  {return true;}
	return false;
}

function initlab(){
  for (i=0; i<kolk; i++) {
    labirint[i] = new Array();
    labirint[i][0] = new Array();
    labirint[i][1] = new Array();
      for (j=0; j<kolk;j++) {
        labirint[i][0][j] = pl[i][j].b_top;
	labirint[i][1][j] = pl[i][j].b_right;
      }
  }
}


function testNext(nxt) {
if (((board.rows[start.rows].cells[start.cols].style.backgroundColor==colorsled)||(board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd"))
	 && ((nxt.style.backgroundColor==colorsled)||(nxt.style.backgroundColor=='#0000fd'))) {

//message.innerText="";
if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd"){board.rows[start.rows].cells[start.cols].style.backgroundColor="#0000fe"}
else {board.rows[start.rows].cells[start.cols].style.backgroundColor="";};
return false
  }
  return true
}

function moveIt(event) {

  if (!progress) return
  
  event = (event) ? event : window.event; 

  switch (event.keyCode) {
case 37: // left
  if (labirint[start.rows][1][start.cols-1]==0) {
if (testNext(board.rows[start.rows].cells[start.cols-1])){}
   document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="none";
start.cols--
if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fe") {
   document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor="#0000fd"}
else { if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd") {} 
else {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor=colorsled}};
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="url(kon.gif)";
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundRepeat="no-repeat";
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundPosition="center";
  } else{}

  break;
case 38: // up
  if (labirint[start.rows][0][start.cols]==0) {
if (testNext(board.rows[start.rows-1].cells[start.cols])){}
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="none";
start.rows--
if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fe") {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor="#0000fd"}
else { if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd") {} 
else {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor=colorsled}};
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="url(kon.gif)";
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundRepeat="no-repeat";
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundPosition="center";
  } else{}

  break;
case 39: // right
  
  if (labirint[start.rows][1][start.cols]==0) {
if (testNext(board.rows[start.rows].cells[start.cols+1])){}
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="none";
start.cols++
if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fe") {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor="#0000fd"}
else { if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd") {} 
else {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor=colorsled}};//document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor=""
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="url(kon.gif)";
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundRepeat="no-repeat";
document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundPosition="center";
  }
  else{}

  break;
case 40: //down
  if (labirint[start.rows+1]==null) return
  if (labirint[start.rows+1][0][start.cols]==0) {
     if (testNext(board.rows[start.rows+1].cells[start.cols])){}
     document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="none";
     start.rows++;
     if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fe") {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor="#0000fd"}
     else { if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd") {} 
            else {
               document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor=colorsled
            }
     };

     document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundImage="url(kon.gif)";
     document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundRepeat="no-repeat";
     document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundPosition="center";
  } else{}
  break;
case 32: // space
  
{ 
if (board.rows[start.rows].cells[start.cols].style.backgroundColor=="#0000fd") {
	document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor=colorsled}
	else {document.getElementById("board").rows[start.rows].cells[start.cols].style.backgroundColor="#0000fd"};
  
  break;}
  }

if (event.preventDefault) {event.preventDefault();}
else {event.returnValue = false;}

  if (document.getElementById("board").rows[start.rows].cells[start.cols].innerHTML=="end") {
//message.innerText="Пройдено!"

progress=false

reimg();
//var tzn = document.getElementById("kur");	
//tzn.src = "labk4.jpg";
//tzn = document.getElementById("zip");	
//tzn.src = "labk5.jpg"
  }
}


function rislab(){
for (var row = 0; row<labirint.length; row++) {
  document.write("<TR>") 

  for (var col = 0; col<labirint[row][0].length; col++) {
document.write("<TD STYLE='")
for (var cell = 0; cell<2; cell++) {
  if (labirint[row][cell][col]==1) 
document.write(sides[cell]+": 4px #cf3a23 solid;")
}
if ((0==col) && (0!=row))
  document.write("border-left: 4px #cf3a23 solid;")
if (row==labirint.length-1)
  document.write("border-bottom: 4px #cf3a23 solid;")
if ((0==row) && (0==col)) 
  document.write(" background-color:"+colorsled+";' class=start>start</TD>")
else
 if ((row==labirint.length-1) && (col==labirint[row][0].length-1))
 //if ((row==0) && (col==labirint[row][0].length-1))
  document.write("' class=end>end</TD>")
 else
  document.write("'>&nbsp;</TD>")
  }
  document.write("</TR>")
}


document.getElementById("board").rows[0].cells[0].style.backgroundImage="url(kon.gif)";
document.getElementById("board").rows[0].cells[0].style.backgroundRepeat="no-repeat";
document.getElementById("board").rows[0].cells[0].style.backgroundPosition="center";
document.getElementById("board").rows[0].cells[0].style.borderLeft="0px black solid";
document.getElementById("board").rows[kolk-1].cells[kolk-1].style.borderRight="0px black solid";

start.rows = 0;
start.cols = 0;
progress=true;

document.onkeydown = moveIt;

board = document.getElementById("board");

}


