var drag_ctrl = new Object();

function mouse_down(event)
{
	var x;
	var y;

	drag_ctrl.evtarget = event.element();
	x = parseInt(drag_ctrl.evtarget.style.left);
	y = parseInt(drag_ctrl.evtarget.style.top);

	x = isNaN(x) ? 0 : x;
	y = isNaN(y) ? 0 : y;

	x -= event.pointerX();
	y -= event.pointerY();

	drag_ctrl.start_x = x;
	drag_ctrl.start_y = y;

	document.observe('mousemove', mouse_move_ff);
	document.observe('mouseup', mouse_up);
	event.stop();
}

function mouse_move_ff(event)
{
	mouse_move(event, event.pointerX(), event.pointerY());

	event.stop();
}

function mouse_move(event, x, y)
{
	var t;

	//
	// move dragged card

	drag_ctrl.evtarget.style.left = (drag_ctrl.start_x + x) + "px";
	drag_ctrl.evtarget.style.top  = (drag_ctrl.start_y + y) + "px";

	//
	// move remaining cards

	for(t = 1; t < dragging.length; t++)
	{
		dragging[t].style.left = drag_ctrl.evtarget.style.left;
		dragging[t].style.top  = (drag_ctrl.start_y + y + stock_width / 42 * t) + "px";
	}
}

function mouse_up(event)
{
	document.stopObserving('mousemove', mouse_move_ff);
	document.stopObserving('mouseup', mouse_up);

	//
	// see which column is the closest

	var x = parseInt(drag_ctrl.evtarget.style.left);
	var mindist = 100000;
	var thecol = -1;
	var t;

	for(t = 0; t < 10; t++)
	{
		var dist = Math.abs(x - x_from_col(t));

		if(dist < mindist)
		{
			mindist = dist;
			thecol = t;
		}
	}

	//
	// see if this move is legal

	if(cols[thecol].length)
	{
		var lastcard = cols[thecol][cols[thecol].length - 1].card_num % 13;
		var curcard = dragging[0].card_num % 13;

		if(curcard != lastcard - 1 && (curcard != 12 || lastcard != 0))
		{
			thecol = original_col;
		}
	}

	//
	// move the dragging cards to that column

	var tgtidx = cols[thecol].length;
	while(dragging.length)
	{
		var l = cols[thecol].push(dragging.shift()) - 1;
		cols[thecol][l].card_col = thecol;
		cols[thecol][l].card_idx = l;
		cols[thecol][l].style.left = x_from_col(thecol) + "px";
		cols[thecol][l].style.top = y_from_row(l) + "px";
	}
	if(thecol != original_col || autosave.pending)
		autosave.set();
	if(thecol != original_col)
	{
		total_moves++;
		check_completed();
		undo.save(original_col, tgtidx, thecol);
	}
}

