// JavaScript Document

function puzzle_init(){
	if(typeof(mon_puzle)!="object"){
		mon_puzle = new puzzle_matrice();
		setTimeout('puzzle_melange(1);', 1000);
	}
	return;
}

function puzzle_aclique(px, py){
	mon_puzle.loop_mix = false;
	if(mon_puzle.clique(px, py))
		mon_puzle.affiche();
	return;
}

function puzzle_melange(i){
	var j, py, px, a, o=-1;
	for (j=0;j<i;j++)
	{
		var b=true;
		while (b){
			px=mon_puzle.freex;
			py=mon_puzle.freey;
			b=false;
			a=Math.floor(Math.random()*4);
			switch(a)
			{
				case 0: px++; break;
				case 1: px--; break;
				case 2: py++; break;
				case 3: py--; break;
			}
			
			if (px < 0 || px > 3 || py < 0 || py > 2 || o==a)
				b=true;
			else{
				switch(a)
				{
					case 0: o=1; break;
					case 1: o=0; break;
					case 2: o=3; break;
					case 3: o=2; break;
				}
			}
		}
		mon_puzle.clique(px, py);
	}
	mon_puzle.affiche();
	if(mon_puzle.loop_mix)
		setTimeout('puzzle_melange(1);', 500);
	return;
}

function puzzle_matrice(){
	this.loop_mix=true;
	this.freex=3;
	this.freey=2;
	this.clique=matriceclique;
	this.affiche=matriceaffiche;

	this.tab=new Array(4);
	this.tab[0] = new Array(document.getElementById("puzzle_0_0").src, document.getElementById("puzzle_0_1").src, document.getElementById("puzzle_0_2").src);
	this.tab[1] = new Array(document.getElementById("puzzle_1_0").src, document.getElementById("puzzle_1_1").src, document.getElementById("puzzle_1_2").src);
	this.tab[2] = new Array(document.getElementById("puzzle_2_0").src, document.getElementById("puzzle_2_1").src, document.getElementById("puzzle_2_2").src);
	this.tab[3] = new Array(document.getElementById("puzzle_3_0").src, document.getElementById("puzzle_3_1").src, document.getElementById("puzzle_3_2").src);
	
	return;
}

function matriceaffiche(){
	for (i=0;i<4;i++){
		for (j=0;j<3;j++){
			if (document.getElementById("puzzle_"+i+"_"+j))
				document.getElementById("puzzle_"+i+"_"+j).src=this.tab[i][j];
		}
	}
	return;
}

function matriceclique(px, py){
	if (Math.abs(px-mon_puzle.freex)+Math.abs(py-mon_puzle.freey)==1){
		if (mon_puzle.tab[mon_puzle.freex][mon_puzle.freey] && mon_puzle.tab[px][py]){
			a=mon_puzle.tab[px][py];
			mon_puzle.tab[px][py]=mon_puzle.tab[mon_puzle.freex][mon_puzle.freey];
			mon_puzle.tab[mon_puzle.freex][mon_puzle.freey]=a;
			mon_puzle.freex=px;
			mon_puzle.freey=py;
			return true;
		}
		else
			return false;
	}
	else
		return false;
}
