var content;

function initCloud()
{	
	setLetterBias();
	addExtremeMarkup();
	moving = false;
	randomCloud(false);
}

function setLetterBias()
{
	letters = new Array("abcd", "efgh","ijkl","mnop","qrst","uvwx","yz");
	ang     = (2 * Math.PI) / letters.length;
	
	letang  = new Array();
	
	for (var i = 0; i < letters.length; i++)
	{
		letang[i] = [Math.cos(i*ang), Math.sin(i*ang)];
	}
}
	
function addExtremeMarkup()
{	
	charcount = 0;
	
	content = document.getElementById("content");
	
	var kids    = content.childNodes;
	var numKids = kids.length;
	
	var df = document.createDocumentFragment();
	
	for (var i=0;i < numKids;i++)
	{
		if (kids[i].nodeType == 3)
		{
			var txt = kids[i].data;
			
			for (var j=0;j<txt.length;j++)
			{
				wspan    = document.createElement("span");
				
				if (txt.charAt(j) == " ")
				{
					wspan.className = "wspace";
				}
				else
				{
					wspan.id        = "w" + charcount++;
					if (txt.charAt(j).match(/\w/))
					{
					   wspan.className = "w" + txt.charAt(j);
					}
					else
					{
					   wspan.className = "wpunct";
					}
				}
				wspan.style["position"] = "relative";
				
				tn = document.createTextNode(txt.charAt(j));
				wspan.appendChild(tn);
				df.appendChild(wspan);
			}
		}
		else
		{
			df.appendChild(kids[i].cloneNode(true));
		}
	}
	
	while(content.hasChildNodes())
	{
		content.removeChild(content.lastChild);
	}
	
	content.appendChild(df);
	
	xArray    = new Array(charcount);
	yArray    = new Array(charcount);
	xvelArray = new Array(charcount);
	yvelArray = new Array(charcount);
}

function randomCloud(bias)
{
	if (moving)
	{
		stopMoving();
	}
	
	var maxx = 300;
	var maxy = 300;
	var xmod = 0;
	var ymod = 0;

	for (var i = 0; i<charcount; i++)
	{
		var id    = "w" + i;
		var wspan  = document.getElementById(id);
		var wclass = wspan.className;
		
		if (wclass == "wpunct" || !bias)
		{
			xpos = Math.round((Math.random() * maxx) - (maxx/2));
			ypos = Math.round((Math.random() * maxy) - (maxy/2));
		}
		else
		{
			for (var j = 0; j < letters.length; j++)
			{
				if (letters[j].indexOf(wclass.substr(1)) != -1)
				{
					xmod = letang[j][0];
					ymod = letang[j][1];
				}
			}
/*			xpos = Math.round((Math.random() * maxx/2) * xmod);
			ypos = Math.round((Math.random() * maxy/2) * ymod); */
			xpos = 200 * xmod;
			ypos = 200 * ymod;
		}
		
		xArray[i] = xpos;
		yArray[i] = ypos;
		
		wspan.style["top"]  = yArray[i] +"px";
		wspan.style["left"] = xArray[i] +"px";
	}
}

function moveAbout()
{
   for (var i=0;i<charcount;i++)
   {
        var id    = "w" + i;
	wspan = document.getElementById(id);
	var maxx = 10;
	var maxy = 10;

	var xacc = Math.round((Math.random() * maxx) - (maxx/2));
	var yacc = Math.round((Math.random() * maxy) - (maxy/2));
	
	xArray[i] += xacc;
	yArray[i] += yacc;
	
	wspan.style["left"] = xArray[i] + "px";
	wspan.style["top"]  = yArray[i] + "px";
    }	
}


function moveHome()
{
   for (var i=0;i<charcount;i++)
   {
        var id    = "w" + i;
	wspan = document.getElementById(id);
	var y = yArray[i];
	var x = xArray[i];
	
	var xacc = -x/10;
	var yacc = -y/10;
	
	if (x > 1 && Math.abs(xacc) < 1)
	{
		xacc = 1 * (Math.abs(xacc)/xacc);
	}
	if (y > 1 && Math.abs(yacc) < 1)
	{
		yacc = 1 * (Math.abs(yacc)/yacc);
	}
	
	xArray[i] += xacc;
	yArray[i] += yacc;
	
	wspan.style["left"] = xArray[i] + "px";
	wspan.style["top"]  = yArray[i] + "px";
    }	
}

function backToTop()
{
	stopMoving();

	for (var i = 0; i<charcount; i++)
	{
		var id    = "w" + i;
		var wspan = document.getElementById(id);
		wspan.style["top"]  = "0px";
		wspan.style["left"] = "0px";
	
	}
}

function moveLetters()
{
	stopMoving();
	if (!moving)
	{
		intID = setInterval(moveHome,200);
		moving = true;
	}
}

function stopMoving()
{
	if (moving)
	{
		moving = false;
		clearInterval(intID);
	}
}

function randomMove()
{
	stopMoving();
	intID = setInterval(moveAbout,200);
	moving = true;
}

function changeText(form)
{
	content = document.getElementById("content");
	
	var ntext = form.newtext.value;
	var ftext = ntext.split(/[\n\f]/);
	
	var df = document.createDocumentFragment();
	
	while(content.hasChildNodes())
	{
		content.removeChild(content.lastChild);
	}
	
	for (var i=0;i<ftext.length;i++)
	{
		var tn = document.createTextNode(ftext[i]);
		var br = document.createElement("br");
		df.appendChild(tn);
		df.appendChild(br);
	}
	
	content.appendChild(df);
	
	addExtremeMarkup();
}
