// drag & drop pickup mode
//document.onmousedown = selectmouse;
//document.onmouseup = stopmove;

// click pickup mode
document.onclick = clicked;

var ie=document.all;
var nn6=document.getElementById&&!document.all;
var move=false;
var x,y;
var index =1;
var dobj;
var solved = false;
var misplaced = false;
var map = new Array();

function clicked(e)
{
	if(move == false)
	{
		selectmouse(e);
	}
	else
	{
		stopmove(e);
	}
}

function movemouse(e)
{	 
  if (move)
  {
    dobj.style.left = (nn6 ? tx + e.pageX - x : tx + (event.clientX + document.documentElement.scrollLeft) - x)+"px";
    dobj.style.top  = (nn6 ? ty + e.pageY - y : ty + (event.clientY + document.documentElement.scrollTop) - y)+"px";
	
    return false;
  }
}

function selectmouse(e)
{
  var fobj  = nn6 ? e.target : event.srcElement;
  var topelement = nn6 ? "HTML" : "BODY";
  
  while (fobj.tagName != topelement && fobj.className != "dragme")
  {
    fobj = nn6 ? fobj.parentNode : fobj.parentElement;
  }
  
  if (fobj.className=="dragme")
  {
	dobj = fobj;
	move = true;

	index++;
	dobj.style.zIndex = index;

    tx = parseInt(dobj.style.left+0);
    ty = parseInt(dobj.style.top+0);
	
    x = nn6 ? e.pageX : event.clientX + document.documentElement.scrollLeft;
    y = nn6 ? e.pageY : event.clientY + document.documentElement.scrollTop;

	if(index > 10000)
	{
		for(var i = 0; i < document.getElementsByName("part").length; i++)
		{
			document.getElementsByName("part")[i].style.zIndex = 0;
		}
		index = 1;
	}
	
    document.onmousemove=movemouse;
    return false;
  }
}

function stopmove(e)
{
	move = false;

	leftpos = nn6 ? e.pageX : event.clientX + document.documentElement.scrollLeft;
	toppos = nn6 ? e.pageY : event.clientY + document.documentElement.scrollTop;
	
	
	if(leftpos >= xmod - xraster && leftpos <= pfsx + xmod && toppos >= ymod - yraster && toppos <= pfsy+ymod)
	{
		dobj.style.left = (parseInt((leftpos-xmod)/xraster)*xraster)+xmod+"px"; 
		dobj.style.top = (parseInt((toppos-ymod)/yraster)*yraster)+ymod+"px"; 				
	}
	
	map_check(dobj.id, parseInt(dobj.style.left), parseInt(dobj.style.top));
	check_misplaced(dobj.id);
}

function map_init()
{
	for (var i=0; i < partnum; i++)
	{
		map[i] =  new Array();
		map[i]["pos"] = new Array();
		map[i]["tpos"] = new Array();
	}
}

function map_check(id, xpos, ypos)
{
	map[id]["pos"]["x"] = xpos;
	map[id]["pos"]["y"] = ypos;
	
	// check overlay
    for (var i=0; i < map.length; i++)				
	{
		if(map[i]["pos"]["x"] == xpos && map[i]["pos"]["y"] == ypos && i != id)
		{
			check_misplaced(dobj.id);
			activate_object(i);			
		}
	}
	
	// check if solved
	if(solved==false)
	{
		var solvedchk = 0;
		
		for (var i=0; i < map.length; i++)
		{
			if(map[i]["pos"]["x"]-xmod == map[i]["tpos"]["x"]  && map[i]["pos"]["y"]-ymod == map[i]["tpos"]["y"])
			{
				solvedchk++;
			}				
		}
		
		if(solvedchk == partnum)
		{
			window.open("/solved.php","solved","width=480,height=320,left=100,top=200");
			solved = true;
		}
	}
}

function toggle_misplaced()
{
	if(misplaced == false)
	{	
		for (var i=0; i < map.length; i++)
		{
			if(map[i]["pos"]["x"]-xmod != map[i]["tpos"]["x"]  || map[i]["pos"]["y"]-ymod != map[i]["tpos"]["y"])
				{
				
					document.getElementById("mp"+i).style.visibility = "visible";
					document.getElementById("misplaced").style.backgroundColor="#CCFFDD";
				}
		}
		
		misplaced = true;
	}
	else
	{
		for (var i=0; i < map.length; i++)
		{
			document.getElementById("mp"+i).style.visibility = "hidden";
			document.getElementById("misplaced").style.backgroundColor="#EEEEEE";
		}
		misplaced = false;
	}
}

function check_misplaced(id)
{
	if(misplaced == true)
	{
		if(map[id]["pos"]["x"]-xmod == map[id]["tpos"]["x"] && map[id]["pos"]["y"]-ymod == map[id]["tpos"]["y"])
		{
			document.getElementById("mp"+id).style.visibility = "hidden";
		}
		else
		{
			document.getElementById("mp"+id).style.visibility = "visible";
		}
	}
}

function activate_object(id1)
{
	dobj = document.getElementById(id1);
		
	index++;
	dobj.style.zIndex = index;

	move=true;
	
	if(index > 10000)
	{
		for(var i = 0; i < document.getElementsByName("part").length; i++)
		{
			document.getElementsByName("part")[i].style.zIndex = 0;
		}
		index = 1;
	}

    document.onmousemove=movemouse;
	
}

function show_preview(puzzlepath)
{
	window.open(puzzlepath+"preview.jpg","preview","width=336,height=258,left=100,top=200");
}

function show_tutorial()
{
	window.open("tutorial.php","Tutorial - Spielanleitung","width=540,height=580,left=100,top=200");
}



