﻿// JScript File

document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;

var dragObject  = null;
var mouseOffset = null;
var hoverIndex = -1;
var mousePos;
var dragObjectStart;
var dragPosition;

function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getOverLap(landingPadObject)
{
    var landingCoords = getPosition(landingPadObject);
    var landLeft = parseInt(landingCoords.x);
    var landRight;
    if(landingPadObject.width)
        landRight = landLeft + parseInt(landingPadObject.width);
    else
        landRight = landLeft + parseInt(landingPadObject.style.width);

    var landTop = parseInt(landingCoords.y);
    var landBottom;
    if (landingPadObject.height)
        landBottom = landTop + parseInt(landingPadObject.height);
    else
        landBottom = landTop + parseInt(landingPadObject.style.height);
    var dragLeft = parseInt(dragObject.style.left);
    var dragRight;
    if(dragObject.width)
        dragRight = dragLeft + parseInt(dragObject.width);
    else
        dragRight = dragLeft + parseInt(dragObject.style.width);
    var dragTop = parseInt(dragObject.style.top);
    var dragBottom;
    if (dragObject.height)
        dragBottom = dragTop + parseInt(dragObject.height);
    else
        dragBottom = dragTop + parseInt(dragObject.style.height);
    
    
    if (dragLeft < landRight && dragRight > landLeft && dragTop < landBottom && dragBottom > landTop)
    {
        var overlapLeft = getMax(landLeft, dragLeft);
        var overlapRight = getMin(landRight, dragRight);
        var overlapTop = getMax(landTop, dragTop);
        var overlapBottom = getMin(landBottom, dragBottom);
        
        var overlap = (overlapRight - overlapLeft) * (overlapBottom - overlapTop);
        
        return overlap;
    }    
    else
        return 0;
}

function getMax(arg1, arg2)
{
    if(arg1 > arg2)
        return arg1;
    else
        return arg2;
}

function getMin(arg1, arg2)
{
    if(arg1 < arg2)
        return arg1;
    else
        return arg2;
}

function checkLandables()
{
    hoverIndex = -1;
    var maxOverlap = 0;
    for (var i = 0; i < landingPads.length; i++)
    {
        if (landingPads[i])
        {
            if (dragObject != landingPads[i])
            {   
                var thisOverlap = getOverLap(landingPads[i]);
                if (thisOverlap > maxOverlap)
                {
                    maxOverlap = thisOverlap;
                    hoverIndex = i;
                }
            }
        }
    }
    for (var j = 0; j < landingPads.length; j++)
    {
        if (landingPads[j])
        {
            if (j == hoverIndex)
                setHover(landingPads[j], true);
            else
                setHover(landingPads[j], false);
        }
    }       
}

function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;
	return {x:left, y:top};
}

function mouseMove(ev){
	ev           = ev || window.event;
	mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
		//alert(mousePos.y - mouseOffset.y);
		dragObject.style.top      = mousePos.y - mouseOffset.y;
		dragObject.style.left     = mousePos.x - mouseOffset.x;
		
        try{checkLandables();}catch(exl){};

		return false;
	}
}
function mouseUp()
{
    if (dragObject)
    {
        try{mouseUpFunction(dragObject);}catch(exc){}
	    dragObject = null;
	}
}

function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
		dragObject  = this;
		dragObjectStart = getPosition(this);
		dragPosition = this.style.position;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}

function restoreDragObject()
{
    dragObject.style.position = dragPosition;
    dragObject.style.top = dragObjectStart.y;
    dragObject.style.left = dragObjectStart.x;
}
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
	};
}
