//
// Copyright ©2008 Brian Earl Watkins.  All rights reserved.
// Not available under the Brian's Utah Weblog Creative Commons license.
//


var xc =[];
var yc =[];
var count=lege.names.length;

//set up dragon drop
document.onmousemove = mouseMove;
document.onmouseup = mouseUp;
var dragee = null;
var mouseOff = null;

var interval = null;

function place()
	{ 
	for(i=0;i<count;i++)
		{
		xc[i]=400*Math.random();
		yc[i]=400*Math.random();
		}
	var socnet = document.getElementById("socnet");
	for(i=0;i<count;i++)
		{
		//create the objects based on data items
		var x = document.createElement("div");
		x.setAttribute("id", lege.names[i]);
		x.style.position = "absolute";
		x.style.top = xc[i] + "px";
		x.style.left = yc[i] + "px";
		x.innerHTML = lege.names[i];

		var y = document.createElement("img");
		if("D" == lege.dems[lege.names[i]])
			y.setAttribute("src", "/wp-content/uploads/2008/04/bluesquare.png");
		else
			y.setAttribute("src", "/wp-content/uploads/2008/04/redsquare.png");
			

		x.insertBefore(y, x.firstChild);
		socnet.appendChild(x);

		makeDrag(x);
		x.index = i;
		}

	//x.x = function(s){y.style.top = s + "px";};
	if(interval == null)
		interval = setInterval("rearrange()", 300);
	}

function renew()
	{
	var socnet = document.getElementById("socnet");
	while(socnet.firstChild)
		socnet.removeChild(socnet.firstChild);
	place();
	}

function rearrange()
	{
	var socnet = document.getElementById("socnet");
	var forcesx = [count];
	var forcesy = [count];
	for(i=0;i<count;i++)
		{
		forcesx[i]=0;
		forcesy[i]=0;
		for(j=0;j<count;j++)
			{
			if(i==j)
				continue;
			dx=xc[i]-xc[j];
			dy=yc[i]-yc[j];
			dist = Math.sqrt(dx*dx+dy*dy);
			if(dist < 1)
				dist = 1;
			attraction = 6*lege[lege.names[i]][lege.names[j]];
			//reconsider this formula
			forcesx[i] += (dx/dist)*(690/(dist) - attraction);
			forcesy[i] += (dy/dist)*(690/(dist) - attraction);
			}
		}



	for(i=0;i<count;i++)
		{
		if(forcesx[i] > 20)
			forcesx[i] = 20;
		if(forcesx[i] < -20)
			forcesx[i] = -20;
		if(forcesy[i] > 20)
			forcesy[i] = 20;
		if(forcesy[i] < -20)
			forcesy[i] = -20;

		x=document.getElementById(lege.names[i]);
		var maxheight = socnet.offsetHeight - x.offsetHeight;
		var maxwidth = socnet.offsetWidth - x.offsetWidth;
		if(x!= null && dragee!=x)
			{
			xc[i] += forcesx[i];
			yc[i] += forcesy[i];
			if(xc[i] < 0)
				xc[i] = 1;
			if(xc[i] > maxheight)
				xc[i] =  maxheight;
			if(yc[i] < 0)
				yc[i] = 1;
			if(yc[i] > maxwidth)
				yc[i] =  maxwidth;

			x.style.top  = xc[i] + "px";
			x.style.left = yc[i] + "px";
			}

		}
	}

function mouseCoords(ev)
	{
	if(ev.pageX || ev.pageY)
		return {x:ev.pageX, y:ev.pageY};

	return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop };
}


function getMouseOff(target, ev)
	{
	ev= ev || window.event;
	var mPos = mouseCoords(ev);
	return {x:mPos.x - target.offsetLeft, y:mPos.y - target.offsetTop};
	}

function mouseMove(ev)
	{
	ev = ev || window.event;
	var pos = mouseCoords(ev);

	if(dragee)
		{
		dragee.style.top = pos.y - mouseOff.y + "px";
		dragee.style.left = pos.x - mouseOff.x + "px";

	//need to adjust for containting element.
		xc[dragee.index] = pos.y - mouseOff.y;
		yc[dragee.index] = pos.x - mouseOff.x;

		return false;
		}
	}

function mouseUp()
	{
	dragee=null;
	}

function makeDrag(item)
	{
	item.onmousedown =
		function(ev)
			{
			dragee=this;
			mouseOff = getMouseOff(this, ev);
			return false;
			};
	}

