/*var currDragObj;
var dodrag = false;
var offsetX=0;
var offsetY=0;
function makeDragable(dragId, ev)
{
	currDragObj = byId(dragId);
	offsetX = mouseX(ev) - findPosX(currDragObj);
	offsetY = mouseY(ev) - findPosY(currDragObj);
	dodrag = true;
	currDragObj.style.zIndex= 99 + "";
}

function leaveDragable()
{
	dodrag = false;
	if(findPosY(currDragObj)<0)
	{
		currDragObj.style.top = "1px"
	}
}

function move(ev)
{
	if(dodrag){
		currDragObj.style.left = (mouseX(ev)- offsetX) + "px";
		currDragObj.style.top  = (mouseY(ev)- offsetY) + "px";
	}
}
*/
var currDragObj;
var currDragObjBody;
var dodrag = false;
var doroll = false;
var offsetX = 0;
var offsetY = 0;
var limitX1 = 0;
var limitY1 = 0;
var limitX2 = 0;
var limitY2 = 0;
var px1 = 0
var px2 = 0
var py1 = 0
var py2 = 0
var rollingOn = true;
var resizeType = "none";
var startX = 0;
var startY = 0;
var _mouseX = 0;
var _mouseY = 0;
var doMove = false;
var dragLeft = true;
var dragTop = true;

function initialize(frameId, ballId) {
	var frame = byId(frameId);
	var ball  = byId(ballId);
	limitX1 = findPosX(frame);
	limitY1 = findPosY(frame);
	limitX2 = limitX1 + frame.offsetWidth;
	limitY2 = limitY1 + frame.offsetHeight;
	//alert(limitX1+" - "+limitX2+"   :   "+limitY1+" - "+limitY2)
}

function setDragLeft(drag) {
    dragLeft = drag;
}

function setDragTop(drag) {
    dragTop = drag;
}
function makeDragable(dragId, ev) {
	currDragObj = byId(dragId);
	incZindex(dragId);
	offsetX = mouseX(ev) - findPosX(currDragObj);
	offsetY = mouseY(ev) - findPosY(currDragObj);
	dodrag = true;
	doroll = false;
    startX = findPosX(currDragObj);
    startY = findPosY(currDragObj);
}

function makeResizableHorizontally(dragId, ev)
{
	var dragIdN = "";
    if(dragId.length > 3) {
        dragIdN = dragId.substring(3);
    }
	currDragObj = byId(dragId);
    currDragObjBody = byId("dlgBody" + dragIdN);
	resizeType = "h";
	offsetX = mouseX(ev)-findPosX(currDragObj);
	dodrag = false;
	doroll = false;
}

function makeResizableVertically(dragId, ev) {
    var dragIdN = "";
    if(dragId.length > 3) {
        dragIdN = dragId.substring(3);
    }
	currDragObj = byId(dragId);
    currDragObjBody = byId("dlgBody" + dragIdN);
	resizeType = "v";
	offsetY = mouseY(ev)-findPosY(currDragObj);
	dodrag = false;
	doroll = false;
}

function makeResizableXY(dragId, ev) {
	makeResizableVertically(dragId, ev);
	makeResizableHorizontally(dragId, ev);
	resizeType = "vh";
}

function byId(id) {
	return document.getElementById(id);
}

function move(ev) {
	if(dodrag) {
        _mouseX = mouseX(ev);
        _mouseY = mouseY(ev);
		var cx = (mouseX(ev)- offsetX);
		var cy = (mouseY(ev)- offsetY);
        if(!dragLeft && cx < 0) {
            return;
        }

        if(!dragTop && cy < 0) {
            return;
        }
        if((isIE())||(currDragObj.style.top!="")) {
            currDragObj.style.left = cx + "px";
            currDragObj.style.top  = cy + "px";
        } else {
            var nid = currDragObj.id;
            var nidNum = nid.substring(nid.lastIndexOf("_")+1);
            byId("node_container_"+nidNum).setAttribute("x",cx+(7) + "px");
            byId("node_container_"+nidNum).setAttribute("y",cy+ (14) + "px");
            currDragObj.setAttribute("x",cx + "px");
            currDragObj.setAttribute("y",cy + "px");

            if(byId("scopeentry_"+nidNum)!=null) {
                byId("scopeentry_"+nidNum).setAttribute("x",cx-7+"px");
                byId("scopeentry_"+nidNum).setAttribute("y",cy-7+"px");
            }
            refresh(nidNum);
        }
        px2 = px1;
        px1 = cx;
        py2 = py1;
        py1 = cy;
        doMove = true;
	}
	else if(resizeType == "h"){
		var cx = (mouseX(ev)-findPosX(currDragObj));
		currDragObj.style.width = cx + "px";
        currDragObjBody.style.width = cx + "px";
		px2 = px1;
		px1 = cx;
	}
	else if(resizeType == "v"){
		var cy = (mouseY(ev)-findPosY(currDragObj));
		currDragObj.style.height = cy + "px";
        if(currDragObjBody) currDragObjBody.style.height = cy + "px";
		py2 = py1;
		py1 = cy;
	}
	else if(resizeType == "vh"){
		var cy = (mouseY(ev)-findPosY(currDragObj));
		currDragObj.style.height = cy + "px";
        currDragObjBody.style.height = cy + "px";
		py2 = py1;
		py1 = cy;
		var cx = (mouseX(ev)-findPosX(currDragObj));
		currDragObj.style.width = cx + "px";
        currDragObjBody.style.width = cx + "px";
		px2 = px1;
		px1 = cx;
	}
}


function leaveDragable() {
    if(currDragObj && currDragObj.nodeName == "rect" && doMove) {
        var targetNode = getOverNode(currDragObj, _mouseX, _mouseY);
        if(targetNode != null) {
            makeNewRelationByDrugAndDrop(currDragObj.id.substr(5), targetNode, startX, startY);
        }
        setPosition(currDragObj.id.substr(5), _mouseX, _mouseY);
    }
	dodrag = false;
    doMove = false;
	if(resizeType == "h" || resizeType == "v" || resizeType == "vh") {
		document.getElementById('focuser').focus();
	}
	resizeType = "none";
	if(rollingOn) {
		if(findPosY(currDragObj)<0) {
			currDragObj.style.top = "1px";
		}
		var xSpeed = 2*(px1-px2);
		var ySpeed = 2*(py1-py2);
		if(Math.abs(ySpeed) > 1 && Math.abs(xSpeed) > 1) {
			doroll = true;
			roll(xSpeed,ySpeed);
		}
	}
}

function roll(xSpeed, ySpeed) {
	if(doroll && (Math.abs(ySpeed) > 1 || Math.abs(xSpeed) > 1)){
		if(currDragObj.style.top!="")
		{
			var newLeftPos = parseInt(currDragObj.offsetLeft) + xSpeed;
			var newTopPos =  parseInt(currDragObj.offsetTop) + ySpeed;
		}
		else
		{
			var newLeftPos = parseInt(currDragObj.x.animVal.value) + xSpeed;
			var newTopPos =  parseInt(currDragObj.y.animVal.value) + ySpeed;
		}
		if(newLeftPos > limitX2-20 && xSpeed > 0)
		{ 
			newLeftPos = limitX2-20;
			xSpeed *= -1/10
			ySpeed *= 1/10
		}
		else if(newLeftPos < limitX1+20 && xSpeed < 0 )
		{ 
			newLeftPos = limitX1+20;
			xSpeed *= -1/10
			ySpeed *= 1/10
		}
		if(newTopPos > limitY2-20 && ySpeed > 0)
		{ 
			newTopPos = limitY2-20;
			ySpeed *= -1/10
			xSpeed *= 1/10
		}
		else if(newTopPos < limitY1+20 && ySpeed < 0)
		{ 
			newTopPos = limitY1+20
			ySpeed *= -1/10
			xSpeed *= 1/10
		}
		currDragObj.setAttribute("x",newLeftPos + "px");
		currDragObj.setAttribute("y",newTopPos + "px");;
		if(Math.abs(ySpeed) > 0)
		{
			ySpeed = ySpeed - ySpeed/5;
		}
		
		if(Math.abs(xSpeed) > 0)
		{
			xSpeed = xSpeed - xSpeed/5;
		}
		setTimeout("roll("+xSpeed+","+ySpeed+")", 20)
	}
	else{
		doroll = false;
		px1 = px2 = py1 = py2 = 0;
		ySpeed = xSpeed = 0;
	}
		
}
function findPosX(obj) {
	var curleft = 0;
	try{
			if(obj.x.animVal.value){
                curleft += obj.x.animVal.value;
            }else
            if (obj.offsetParent ||(obj.style.top!="")) {
				while (obj.offsetParent) {
					curleft += obj.offsetLeft;

					obj = obj.offsetParent;
				}
			}
	}catch(ex){}

	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	try {

		if (obj.y.animVal.value) {
            curtop += obj.y.animVal.value;
        }else
        if (obj.offsetParent||(obj.style.top!="")) {
			while (obj.offsetParent) {
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
	} catch(ex){}

	return curtop;
}

function mouseX(ev) {
		var x = ev.pageX;
		if (!x && 0 !== x) {
			x = ev.clientX || 0;
		}
	
		return x;
}

function mouseY(ev) {
		var y = ev.pageY;
		if (!y && 0 !== y) {
			y = ev.clientY || 0;
		}
		return y;
}
