//Danke für die inspirierenden Webseiten: http://maettig.com/code/javascript/3d-tag-cloud.html
//und http://www.roytanck.com/

var radius = 40;
var mouseX = 150;
var mouseY = 150;

window.onload = function()
{
	var tagcontainer = document.getElementById("tagcloud");
	tagcontainer.parentNode.style.display = "block";
	var tags = tagcontainer.getElementsByTagName("A");
	
	for(var i = 0; i < tags.length; i++)
	{	
		//Kugelkoordinaten
		tags[i].r = radius;
		tags[i].a = (i / 5) * 360 / (tags.length / 5);
		tags[i].b = (i % 5) * 180 / 5;
		//Kartesische Koordinaten
		tags[i].x = tags[i].r * Math.sin(tags[i].a * Math.PI / 180) * Math.cos(tags[i].b * Math.PI / 180);
		tags[i].y = tags[i].r * Math.sin(tags[i].a * Math.PI / 180) * Math.sin(tags[i].b * Math.PI / 180);
		tags[i].z = tags[i].r * Math.cos(tags[i].a * Math.PI / 180);	
		
		tags[i].style.top = tags[i].y + (radius + 10) + "%";
		tags[i].style.left = tags[i].x  + radius + "%";
		tags[i].style.fontSize = (tags[i].z / 3 + 5 > 0)?(tags[i].z / 3 + 5+ "px"):(0+ "px") ;
	}
	aktualisieren();
}

function aktualisieren()
{
	var tagcontainer = document.getElementById("tagcloud");
	var tags = tagcontainer.getElementsByTagName("A");
	var sizX = tagcontainer.offsetWidth/2;
	var sizY = tagcontainer.offsetHeight/2;
	var offX = tagcontainer.offsetLeft;
	var offY = tagcontainer.offsetTop;
	var mX = mouseX - sizX - offX + pageOffset().left;
	var mY = mouseY - sizY - offY + pageOffset().top;
	if (mX > sizX) mX = sizX;
	else if (mX < -sizX) mX = -sizX;
	if (mY > sizY) mY = sizY;
	else if (mY < -sizY) mY = -sizY;
	var a = Math.sqrt(mX * mX + mY * mY) / sizX;	//Winkel

	if (a > 0)
	{
		a = a * Math.PI / 180;	//Grad
		var cos = Math.cos(a);
		var sin = Math.sin(a);
		var wx = -mY / Math.sqrt(Math.pow(mX, 2) + Math.pow(mY, 2));
		var wy = mX / Math.sqrt(Math.pow(mX, 2) + Math.pow(mY, 2));
		var wz = 0;
		
		for(var i = 0; i < tags.length; i++)
		{	
			var nx, ny , nz;	//neue Koordinaten

			var x = tags[i].x;
			var y = tags[i].y;
			var z = tags[i].z;
			
			tags[i].x = x * (cos + Math.pow(wx, 2) * (1 - cos)) + y * (wz * sin + wx * wy *(1 - cos)) + z * (-wy * sin + wx * wz * (1 - cos));
			tags[i].y = x * (-wz * sin + wx * wy *(1 - cos)) + y * (cos + Math.pow(wy, 2) * (1 - cos)) + z * (wx * sin + wy * wz * (1 - cos));
			tags[i].z = x * (wy * sin + wx * wz *(1 - cos)) + y * (-wx * sin + wy * wz *(1 - cos)) + z * (cos + Math.pow(wz, 2) * (1 - cos));
			//Quelle: http://www.chemieonline.de/forum/showthread.php?t=30523//
			
			tags[i].style.top = tags[i].y + (radius + 10) + "%";
			tags[i].style.left = tags[i].x  + radius + "%";
			tags[i].style.fontSize = (tags[i].z / 3 + 5 > 0)?(tags[i].z / 3 + 5+ "px"):(0+ "px") ;
			
			
		}	
		//document.getElementById("zustand").innerHTML = mX + ", " + mY + " ,  " + pageOffset().top;
	}
	
	window.setTimeout("aktualisieren()", 10);
}

//bestimmt die Scroll-Differenzen
function pageOffset()
{
    var pos = {left:0,top:0};

    if(typeof window.pageXOffset != 'undefined')
    {
         // Mozilla/Netscape
         pos.left = window.pageXOffset;
         pos.top = window.pageYOffset;
    }
    else
    {
         var obj = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
         window.document.documentElement : window.document.body || null;

         pos.left = obj.scrollLeft;
         pos.top = obj.scrollTop;
    }
    return pos;
}
//Quelle: http://forum.de.selfhtml.org/archiv/2005/10/t117283/


