//=======================================================================================================================================
jQuery.fn.j15 = function(options){
	
	//настройки по умолчанию
	var options = jQuery.extend({
		'rows' : 3,
		'cols' : 4,
		'cellspacing' : 1,
		'emptyCell' : 'last',
		'shuffle' : true
	}, options);
	
	

	return this.each(function() {
		var box = this;
		
		//определяем номер пустой ячейки
		var emptyCell = options.emptyCell;
		if(options.emptyCell == 'last'){emptyCell = options.rows*options.cols}
		
		//находим имя картинки
		var imgUrl = $(box).children('img').attr('src');
		
		//скрываем исходную картинку и добавляем блок, в котором будут ячейки
		$(box).children('img').hide();
		$(box).append('<div style="display:inline-block; margin-left:-'+options.cellspacing+'px; margin-top:-'+options.cellspacing+'px"></div>');
		
		//вычисляем размеры ячейки
		var cellWidth = Math.floor(($(box).width()-(options.cols-1)*options.cellspacing)/options.cols);
		var cellHeight = Math.floor(($(box).height()-(options.rows-1)*options.cellspacing)/options.rows);
		
		//Формируем перетасованный массив
		var shuffleArr = new Array();
		for (var i=0; i<options.rows*options.cols; i++){
			shuffleArr.push(i+1);
		}
		if (options.shuffle) {
			var len=shuffleArr.length;
			for(var i=0; i<shuffleArr.length; i++){
				var tmp = shuffleArr[i]
				var rnd = Math.floor(Math.random()*(len-i));
				shuffleArr[i]=shuffleArr[i+rnd];
				shuffleArr[i+rnd]=tmp;
			}
		}
		
		//заполняем контейнер ячейками
		for(var i=1; i<=options.rows*options.cols; i++) {
			
			//вычисляем значения для background-position
			var currentCol = (shuffleArr[i-1]-1)%options.cols+1;
			var currentRow = Math.floor((shuffleArr[i-1]-1)/(options.cols))+1;
			var x = (currentCol-1)*(cellWidth+options.cellspacing);
			var y = (currentRow-1)*(cellHeight+options.cellspacing)
			var bpx = $(box).width()-x;
			var bpy = $(box).height()-y;
		
			var cell = $('<div style="display:inline; float:left; width:'+cellWidth+'px; height:'+cellHeight+'px; margin-left:'+options.cellspacing+'px; margin-top:'+options.cellspacing+'px; background:url('+imgUrl+') '+bpx+'px '+bpy+'px;"></div>');
			$(box).children('div').append(cell);
			
			//одну ячейку оставляем пустой
			if(shuffleArr[i-1] == emptyCell) {$(cell).css('background-image','none')}
		}
		
		//обрабатываем клик по ячейке
		$(box).children('div').children().click(function(){
			
			//находим номер ячейки
			var n = $(box).children().children().index(this)+1;
			
			//находим номера всех соседних ячеек
			var neighbors = findNeighbors(n);
			
			//если среди соседних ячеек есть пустая меняем ячейки местами
			for(var i=0; i<neighbors.length; i++) {
				if(($(box).children().children().eq(neighbors[i]-1).css('background-image')) == 'none') {
					var background = $(box).children().children().eq(n-1).css('background');
					$(box).children().children().eq(neighbors[i]-1).css('background',background);
					$(box).children().children().eq(n-1).css('background-image','none');
				};
			}
			
		});
		
		//изменяем прозрачность ячейки при наведении на нее курсора мыши
		$(box).children('div').children().hover(
			function(){
				$(this).fadeTo(80, 0.66);
			},
			function(){
				$(this).fadeTo(80, 1);
			}
		);
		
		//эта функция находит все соседние ячейки и возвращает их в виде массива
		function findNeighbors(cellNumber) {
			var out = [];																						
			if((cellNumber-options.cols)>0) {out.push(cellNumber-options.cols)}									//проверяем верхнюю ячейку	
			if(cellNumber%options.cols) {out.push(cellNumber + 1)}												//проверяем правую ячейку
			if((cellNumber+options.cols)<=(options.cols*options.rows)) {out.push(cellNumber+options.cols)}		//проверяем нижнюю ячейку
			if((cellNumber-1)%options.cols) {out.push(cellNumber - 1)}											//проверяем левую ячейку
			return out;
		};

	});

};

jQuery.fn.j15re = function(options){
	return this.each(function() {
		var box = this;
		$(box).children('div').remove();
		$(box).children('img').show();
	});
};
//=====================================================================================================================================================





$(document).ready(function(){
	$('#puzzle-box').j15();
	
	//При клике на ссылке собрать, собираем пазл
	$("#puzzle-link1").live("click", function(){
		$(this).parent().html('<a id=\"puzzle-link2\" class=\"puzzle-link\" href=\"#\">Замесить</a>');
		$('#puzzle-box').j15re();
		$('#puzzle-box').j15({'shuffle':false})
		return false;
	})
	
	//При клике на ссылке замесит, перемешиваем пазл
	$("#puzzle-link2").live("click", function(){
		$(this).parent().html('<a id=\"puzzle-link1\" class=\"puzzle-link\" href=\"#\">Собрать</a>');
		$('#puzzle-box').j15re();
		$('#puzzle-box').j15()
		return false;
	});
});














