<!--
document.write("<link href=\"http://www.metaboy.net/toys/15puzzle/15puzzle.css\" rel=\"stylesheet\" type=\"text/css\" />");

var c_numX = 4; var c_numY = 4; var c_cnt = 16;
var cnt_shuffle = 100; var def_cnt_shuffle = 100; var max_cnt_shuffle = 1000;
var d_width = 152; var c_width = 0; var c_height = 0;

var temp_c_num = 0;
var nowstatus = 0;
var img_puzzle = "http://www.metaboy.net/toys/15puzzle/images/mypet_pii.jpg";
var c_sets = new Array(c_cnt);
var c_lefts = new Array(c_cnt);
var c_clips = new Array(c_cnt);
var empc_cnt = c_cnt-1;
var temp_empc_cnt=empc_cnt;
function init_15puzzle(intType){
	var form = this.document.forms['form_15puzzle']; // フォームオブジェクト
	// セットチェック
	if(intType===1){
		if(form.num_shuffle.value==''){ alert("「回数」をセットしてください。"); return; }
		if(!
			((form.num_shuffle.value>0)&&(form.num_shuffle.value<=max_cnt_shuffle))
			){ alert("1回から" + max_cnt_shuffle + "回ぐらいで、お願いします。"); return; }
	}
	cnt_shuffle = form.num_shuffle.value;
	if(!((form.num_shuffle.value>0)&&(form.num_shuffle.value<=max_cnt_shuffle))){
		cnt_shuffle = def_cnt_shuffle;
	}
	form.num_shuffle.value = cnt_shuffle;
	
	temp_empc_cnt=empc_cnt;
	var tar_img=new Image(); tar_img.src=img_puzzle;

	c_width = Math.floor(d_width/c_numX);
	c_height = Math.floor(tar_img.height*((c_width/tar_img.width)));
	
	for(iy=0;iy<c_numY;iy++){ for(ix=0;ix<c_numX;ix++){
		temp_c_num=(iy*c_numX) + ix;
		c_sets[temp_c_num] =temp_c_num;
		c_lefts[temp_c_num]  ="-" + ix*c_width+"px";
		c_lefts[temp_c_num] +=" -" + iy*c_height+"px";
	}}

	var outHTML="<table id ='table_15puzzle' border=0 cellspacing=0 cellpadding=0>\n";
	for(iy=0;iy<c_numY;iy++){ outHTML +="<tr>\n";
		for(ix=0;ix<c_numX;ix++){
			temp_c_num=(iy*c_numX) + ix;
			outHTML +="<td id=\"c_" + temp_c_num + "\" class=\"td_15puzzle\"";
			outHTML +=" onclick=\"javascript:goCell(" + temp_c_num + ");\"";
			outHTML +=" style=\"width:" + c_width + "px;  height:" + c_height + "px;";
			outHTML +=" background:#FFFFFF;\">\n";
			outHTML +="<div id=\"csrc_" + temp_c_num + "\"></div></td>\n";
		} outHTML +="</tr>\n";
	} outHTML +="</table>\n";
	var b_pazzle = document.getElementById('div_15puzzle');
	b_pazzle.innerHTML = outHTML;

	if(intType==1){
		var dx=new Array(0,1,0,-1); var dy=new Array(1,0,-1,0);
		for(i=0;i<cnt_shuffle;i++){
			var empc_X = temp_empc_cnt%c_numX; var empc_Y = (temp_empc_cnt-empc_X)/c_numX;
			var changec_cnt = Math.floor(Math.random()*4);
			var changec_cnt_X = empc_X+dx[changec_cnt];
			var changec_cnt_Y = empc_Y+dy[changec_cnt];
			if(
				(0<=changec_cnt_X)
				&&(changec_cnt_X<c_numX)
				&&(0<=changec_cnt_Y)
				&&(changec_cnt_Y<c_numY)){
					var tar_c = changec_cnt_X+changec_cnt_Y*c_numX;
					c_sets[temp_empc_cnt]=c_sets[tar_c];
					c_sets[tar_c]=empc_cnt;
					temp_empc_cnt=tar_c;
			}
		}
	}
	go_view(intType);

}
function go_view(intType){
	var b_pazzle = document.getElementById('div_15puzzle');
	for(iy=0;iy<c_numY;iy++){ for(ix=0;ix<c_numX;ix++){
		temp_c_num=(iy*c_numX) + ix;
		var temp_c_id="c_" + temp_c_num;
		var b_pazzle_cell = document.getElementById(temp_c_id);

		if(intType==1){
			if(nowstatus==9){
				b_pazzle_cell.style.background="url("+img_puzzle+")";
				b_pazzle_cell.style.background.width="152px";
			}else{
				if(c_sets[temp_c_num]==empc_cnt){
					b_pazzle_cell.style.background="";
				
				}else{
					b_pazzle_cell.style.background="url("+img_puzzle+")";
					b_pazzle_cell.style.background.width="152px";
				}
			}
		}else{
			b_pazzle_cell.style.background="url("+img_puzzle+")";
			b_pazzle_cell.style.background.width="152px";
		}
		b_pazzle_cell.innerHTML="";
		b_pazzle_cell.style.backgroundPosition=c_lefts[c_sets[temp_c_num]];
	}}
}

function goCell(n){
	if(nowstatus==1){
	}else{
		var this_c_X = n%c_numX; var this_c_Y = (n-this_c_X)/c_numX;
		var empc_X = temp_empc_cnt%c_numX; var empc_Y = (temp_empc_cnt-empc_X)/c_numX;
		var go_flg=0;
		var tar_X=0; var tar_Y=0;
		var src_X=0; var src_Y=0;
		if(this_c_X==empc_X){
			if(this_c_Y<empc_Y){
				for(i=empc_Y;i>this_c_Y;i--){
					tar_X = i*c_numX+this_c_X;
					src_X = (i-1)*c_numX+this_c_X;
					c_sets[tar_X]=c_sets[src_X];
				} go_flg=1;
			}else{
			if(this_c_Y>empc_Y){
				for(i=empc_Y;i<this_c_Y;i++){
					tar_X = i*c_numX+this_c_X;
					src_X = (i+1)*c_numX+this_c_X;
					c_sets[tar_X]=c_sets[src_X];
				} go_flg=1;
			}}
		}else{
		if(this_c_Y==empc_Y){
			if(this_c_X<empc_X){
				for(i=empc_X;i>this_c_X;i--){
					c_sets[this_c_Y*c_numX+i]=c_sets[this_c_Y*c_numX+(i-1)];
				} go_flg=1;
			}else{
			if(this_c_X>empc_X){
				for(i=empc_X;i<this_c_X;i++){
					c_sets[this_c_Y*c_numX+i]=c_sets[this_c_Y*c_numX+(i+1)];
				} go_flg=1;
			}}
		}}
		
		if(go_flg==1){
		c_sets[n]=empc_cnt; temp_empc_cnt=n; go_view(1); }
	}
}

var outHTML = "<div class=\"headBox\" align=\"left\">なんか、懐かし<br />15パズルしたくなったなぁ。";
outHTML += "</div>";

outHTML += "<div class=\"contents\"><div id=\"div_15puzzle\"></div>";
outHTML += "<form method=\"post\" name=\"form_15puzzle\" id=\"form_15puzzle\">";
outHTML += "挑戦！:<br />";
outHTML += "(何回動かしてスタートする？)<br />";
outHTML += "<input type='text' name='num_shuffle' value='" + cnt_shuffle + "' size=5 maxlength=4>回";
outHTML += "　<input type='button' name='bt_shuffle' value='シャッフル' onClick=\"javascript:init_15puzzle(1);\">";
outHTML += "<div class=\"button_15puzzle\"><input type='button' name='bt_giveup' value='ギブアップ' onClick=\"javascript:init_15puzzle(0);\">";
outHTML += "</div>";
outHTML += "</form><br />";

outHTML += "<br />";
outHTML += "<div class='padding_10'><br />";
outHTML += "※回数設定しシャッフル。<br />";
outHTML += "　やってみてね。<br />";

outHTML += "　Thanks to <br />";
outHTML += "　・<a href=\"http://www.k2.dion.ne.jp/~jan2005/tips/slidepuzzle_index.html\" target=\"_blank\" rel=\"nofollow\">";
outHTML += "ikanagonokugini さん";
outHTML += "</a><br />";
outHTML += "</div>";
outHTML += "</div>";
document.write(outHTML);

init_15puzzle(1);
//-->