/* Relocate object in a web page */
/* sintax: <element id="<id_name>" onmousedown="relocateElement(this,event)" style="position:asolute;">content</element>*/

var down = true;
var L, T, X, Y;
var rel_elements = Array()
var border_during_relocate = "2px dashed #CCC"
var rel_elem_border
var rel_elem
var hi = 105 // z-index to view
var low = 100 // z-index to sub-view

function hdiv ()
{
	if (document.getElementById('hidden-div'))
		return true
	hiddenDiv = document.createElement('div')
	hiddenDiv.id = 'hidden-div'
	hiddenDiv.style.width = "100%"
	hiddenDiv.style.height = "100%"
	hiddenDiv.style.top = "0px"
	hiddenDiv.style.left = "0px"
	
	hiddenDiv.style.zIndex = 99
	hiddenDiv.style.position = 'absolute'
	
	document.getElementsByTagName('body')[0].appendChild(hiddenDiv)
}

function relocateElement(elem,event)
{
	rel_elem = elem

	document.onmousedown = function () { relocate(event); }
	document.onmouseup = function () { up(); }
}

function relocate(event)
{
	srcElem = (event.srcElement ? event.srcElement : event.target)
	if ( srcElem.id == rel_elem.id)
	{
		down = true
	
		rel_elem.style.position = "absolute"
		rel_elem.style.zIndex = hi

		if (rel_elements.in_array(rel_elem.id) == -1)
			rel_elements.push(rel_elem.id)

		for (i = 0; i < rel_elements.length; i++)
			if (rel_elements[i] != rel_elem.id && getOpacity(rel_elements[i]) > 0)
			{
				$(rel_elements[i]).style.zIndex = low
			}

		rel_elem_border = rel_elem.style.border
		rel_elem.style.border = border_during_relocate
	
		document.onmousemove = Move

		// In X e Y ci metto le coordinate del mouse
		if (document.all) { // grab the x-y pos.s if browser is IE
			X = window.event.clientX + document.body.scrollLeft
			Y = window.event.clientY + document.body.scrollTop
		} else { // grab the x-y pos.s if browser is NS
			X = event.pageX
			Y = event.pageY
			//alert(X);
		} 
		// in L e T ci metto il margine sinistro e top del div
		L = getLeft()
		T = getTop()

		if (String(L).search("px") != -1)
			L = parseInt(L.replace("px",""),10);
		if (String(T).search("px") != -1)
			T = parseInt(T.replace("px",""),10);
	}
}

function getLeft()
{
		if (rel_elem.style.pixelLeft)
		{
			if (rel_elem.style.pixelLeft == "")
				return rel_elem.offsetLeft
			else
				return rel_elem.style.pixelLeft
		}
		else
		{
			if (rel_elem.style.left == "")
				return rel_elem.offsetLeft
			else
				return rel_elem.style.left
		}
}

function getTop()
{
		if (rel_elem.style.pixelTop)
		{
			if (rel_elem.style.pixelTop == "")
				return rel_elem.offsetTop 
			else
				return rel_elem.style.pixelTop
		}
		else
		{
			if (rel_elem.style.top == "")
				return rel_elem.offsetTop
			else
				return rel_elem.style.top
		}
}
/**/
function Move(event)
{
	var shiftH = L + parseInt(mouseX(event),10) - X
	var shiftV = T + parseInt(mouseY(event),10) - Y
	if (down)
	{
		hdiv()

		if (rel_elem.style.pixelLeft)
		{
			rel_elem.style.pixelLeft = shiftH;
			rel_elem.style.pixelTop = shiftV;
		}
		else
		{
			rel_elem.style.left = String(shiftH) + "px";
			rel_elem.style.top = String(shiftV) + "px";
		}
	}
}
function up() {
	down = false
	if ($('hidden-div'))
		rmNode('hidden-div')
	$(rel_elem).style.border = rel_elem_border
}
function mouseX(event)
{
	if (document.all) { // grab the x-y pos.s if browser is IE
		return window.event.clientX + document.body.scrollLeft
	} else { // grab the x-y pos.s if browser is NS
		return event.pageX
	} 
}
function mouseY(event)
{
	if (document.all) { // grab the x-y pos.s if browser is IE
		return window.event.clientY + document.body.scrollTop
	} else { // grab the x-y pos.s if browser is NS
		return event.pageY
	} 
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}

function getY( oElement )
{
	var iReturnValue = 0;
	while( oElement != null ) {
		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

function objPos ()
{
		if (rel_elem.style.pixelLeft)
		{
			rel_elem.style.pixelLeft = getLeft()
			rel_elem.style.pixelTop = getTop()
		}
		else
		{
			rel_elem.style.left = getLeft()
			rel_elem.style.top = getTop()
		}
}

