/* Librerķa para arrastrar objetos */

// Global holds reference to selected element
var selectedObj;
   
// Globals hold location of click relative to element
var offsetX, offsetY;
   
// Set global reference to element being engaged and dragged
function setSelectedElem(evt) 
{
    var target = (evt.target) ? evt.target : evt.srcElement;
    var divID = (target.name && target.src) ? target.name + "tas" : "";
    
    if (divID) 
	{
        if (document.layers) 
		{
            selectedObj = document.layers[divID];
        } 
		else if (document.all) 
		{
            selectedObj = document.all(divID);
        } 
		else if (document.getElementById) 
		{
            selectedObj = document.getElementById(divID);
        }
        setZIndex(selectedObj, 100);
        return;
    }
    selectedObj = null;
    return;
}
   
// Turn selected element on
function engage(evt) 
{
    evt = (evt) ? evt : event;
    
	setSelectedElem(evt);
	
    if (selectedObj) 
	{
        if (document.body && document.body.setCapture) 
		{
            // engage event capture in IE/Win
            document.body.setCapture();
        }
        if (evt.pageX) 
		{
            offsetX = evt.pageX - ((selectedObj.offsetLeft) ? selectedObj.offsetLeft : selectedObj.left);
            offsetY = evt.pageY - ((selectedObj.offsetTop) ? selectedObj.offsetTop : selectedObj.top);
        } 
		else if (typeof evt.offsetX != "undefined") 
		{
            offsetX = evt.offsetX - ((evt.offsetX < -2) ? 0 : document.body.scrollLeft);
            offsetX -= (document.body.parentElement && document.body.parentElement.scrollLeft) ? document.body.parentElement.scrollLeft : 0
            offsetY = evt.offsetY - ((evt.offsetY < -2) ? 0 : document.body.scrollTop);
            offsetY -= (document.body.parentElement && document.body.parentElement.scrollTop) ? document.body.parentElement.scrollTop : 0
        } 
		else if (typeof evt.clientX != "undefined") 
		{
            offsetX = evt.clientX - ((selectedObj.offsetLeft) ? selectedObj.offsetLeft : 0);
            offsetY = evt.clientY - ((selectedObj.offsetTop) ? selectedObj.offsetTop : 0);
        }
        return false;
    }
    return true;
}
   
// Drag an element
function dragIt(evt) 
{
    evt = (evt) ? evt : event;
	
    if (selectedObj) 
	{
        if (evt.pageX) 
		{
            shiftTo(selectedObj, (evt.pageX - offsetX), (evt.pageY - offsetY));
        } 
		else if (evt.clientX || evt.clientY) 
		{
            shiftTo(selectedObj, (evt.clientX - offsetX), (evt.clientY - offsetY));
        }
        evt.cancelBubble = true;
        return false;
    }
    return true;
}
   
// Turn selected element off
function release(evt) 
{
    if (selectedObj) 
	{
        setZIndex(selectedObj, 0);
        if (document.body && document.body.releaseCapture) 
		{
            // stop event capture in IE/Win
            document.body.releaseCapture();
        }
        selectedObj = null;
    }
}
   
// Assign event handlers used by both Navigator and IE
function initDrag( ) 
{
    if (document.layers) 
	{
        // turn on event capture for these events in NN4 event model
        document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
        return;
    } 
	else if (document.body & document.body.addEventListener) 
	{
        // turn on event capture for these events in W3C DOM event model
        document.addEventListener("mousedown", engage, true);
        document.addEventListener("mousemove", dragIt, true);
        document.addEventListener("mouseup", release, true);
        return;
    }
    document.onmousedown = engage;
    document.onmousemove = dragIt;
    document.onmouseup = release;
    return;
}
