// JavaScript Document

if ( document.__pz_shared_defined ) {
	//console.log("shared js already included: ["+document.__pz_shared_defined+"]");
} else {
	document.__pz_shared_defined = 1;

var __pz_state = [];
//console.log("in __pz_shared_defined");

function __pz__rawSetImageState(tag,loc_r,loc_c,img_r,img_c) {
	__pz_state[tag]['state'][loc_r-1][loc_c-1][0] = img_r;
	__pz_state[tag]['state'][loc_r-1][loc_c-1][1] = img_c;
}
function getImageState(tag,loc_r,loc_c) {
   var rc = __pz_state[tag]['state'][loc_r-1][loc_c-1];
   //return new Array( rc[0], rc[1] ) ;
   var res = [ rc[0], rc[1] ] ;
   return res;
}
function __pz__getVersion(tag) {
   return __pz_state[tag]['version'];
}
function __pz__getSrc(tag) {
   return __pz_state[tag]['src'];
}

function __pz__tag_suffix(tag) {
	if ( tag ) {
		return "_" + tag;
	} else {
		return "";
	}
}

function __pz__getImageId(tag,loc_r,loc_c) {
	var id =  "img_id_r" + loc_r +"_c" + loc_c + __pz__tag_suffix(tag);
	return id;
}

function __pz__getImageClass(tag,img_r,img_c) {
	return "clip_r" + img_r +"_c" + img_c + __pz__tag_suffix(tag);
}

function __pz__getImageSrc(tag,img_r,img_c) {
	var src_base = __pz__getSrc(tag);
	return src_base + "_r" + img_r +"_c" + img_c + ".gif";
}

function setImageState(tag,loc_r,loc_c,img_r,img_c) {
	old_rc = getImageState(tag,loc_r,loc_c);
	__pz__rawSetImageState(tag,loc_r,loc_c,img_r,img_c);
	var ver = __pz__getVersion(tag);
	id = __pz__getImageId(tag,loc_r,loc_c);
	if ( ver == 2 ) {
		oldClass = __pz__getImageClass(tag,old_rc[0],old_rc[1]);
		imgClass = __pz__getImageClass(tag,img_r,img_c);
		puzzleRemoveClass(id,oldClass);
		puzzleAddClass(id,imgClass);
	} else {
		src = __pz__getImageSrc(tag,img_r,img_c);
		puzzleSetSrc(id,src);
	}
}


function doUp(tag,rows,n)
  {
  //console.log("doUp<?php echo $tag; ?>("+n+")");

	var tmp_rc = getImageState( tag, 1, n );
  //console.log("tmp_rc="+tmp_rc[0]+","+tmp_rc[1]);
    for ( var r=1; r<=rows-1; r++ ) {
	  var new_rc = getImageState( tag, r+1, n );
 // console.log("set "+r+","+n+" = new_rc="+new_rc[0]+","+new_rc[1]);
	  setImageState(tag, r, n, new_rc[0], new_rc[1] );
    }
	setImageState(tag, rows, n, tmp_rc[0], tmp_rc[1] );
  //console.log("set "+<?php echo $rows; ?>+","+n+" = tmp_rc="+tmp_rc[0]+","+tmp_rc[1]);
  }
function doDown(tag,rows,n)
  {
	var tmp_rc = getImageState( tag, rows, n );
    for ( var r=rows; r>=2; r-- ) {
	  var new_rc = getImageState( tag, r-1, n );
	  setImageState(tag, r, n, new_rc[0], new_rc[1] );
    }
	setImageState(tag, 1, n, tmp_rc[0], tmp_rc[1] );
  }
function doLeft(tag,cols,n)
  {
	var tmp_rc = getImageState( tag, n, 1 );
    for ( var c=1; c<=cols-1; c++ ) {
	  var new_rc = getImageState( tag, n, c+1 );
	  setImageState(tag, n, c, new_rc[0], new_rc[1] );
    }
	setImageState(tag, n, cols, tmp_rc[0], tmp_rc[1] );
  }
function doRight(tag,cols,n)
  {
	var tmp_rc = getImageState( tag, n, cols );
    for ( var c=cols; c>=2; c-- ) {
	  var new_rc = getImageState( tag, n, c-1 );
	  setImageState(tag, n, c, new_rc[0], new_rc[1] );
   }
	setImageState(tag, n, 1, tmp_rc[0], tmp_rc[1] );
  }

function puzzle_reset(tag,rows,cols)
  {
   for( i=1; i<=rows; i++ ) {
      for( j=1; j<=cols; j++ ) {
	  	 setImageState( tag, i, j, i, j );
      }
    }
  }


function puzzle_set(tag,rows,cols,square)
  {
       pos = 0;
//alert("square is "+square);
   codes = square.split(",");
   for( i=1; i<=rows; i++ )
    {
      for( j=1; j<=cols; j++ )
      {
        code = codes[pos];
        pos++;
		rc = code.split("_");
//console.log("code="+code+" rc={"+rc[0]+","+rc[1]+"}");
	  	setImageState( tag, i, j, rc[0], rc[1] );
      }
    }

  }
  
  




} // end shared_defined
