﻿function DragTool(tool, space, eventTargetName)
{
    this.Dragging = false;
    this.Tool = tool;
    this.Space = space;
    
    var target = tool;
    
    if (eventTargetName)
    {
        target = tool.findName(eventTargetName);
    }
    
    target.AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.StartDragging));
    target.AddEventListener("MouseMove", Silverlight.createDelegate(this, this.Drag));
    target.AddEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.EndDragging));
}

DragTool.prototype.StartDragging = function(sender, mouseEventArgs)
{
    ///<summary>Start Dragging the tool</summary>
    ///<param name="sender" type="Path">the path being dragged</param>
    ///<param name="mouseEventArgs" type="MouseEventArgs">the mouse event arguments</param>
    
    if (sender.CaptureMouse())
    {
        this.Dragging = true;
        this.RelativePosition = mouseEventArgs.getPosition(sender);
    }
}

DragTool.prototype.Drag = function(sender, mouseEventArgs)
{
    ///<summary>Drag the polygon</summary>
    ///<param name="sender" type="Path">the path being dragged</param>
    ///<param name="mouseEventArgs" type="MouseEventArgs">the mouse event arguments</param>
    
    if (this.Dragging)
    {
        var position = mouseEventArgs.getPosition(this.Space);
        var x = position.X - this.RelativePosition.X;
        var y = position.Y - this.RelativePosition.Y;
        
        this.Tool["Canvas.Left"] = x;
        this.Tool["Canvas.Top"] = y;
    }
}

DragTool.prototype.EndDragging = function(sender, mouseEventArgs)
{
    ///<summary>End dragging the polygon</summary>
    ///<param name="sender" type="Path">the path being dragged</param>
    ///<param name="mouseEventArgs" type="MouseEventArgs">the mouse event arguments</param>

    if (this.Dragging)
    {
        sender.ReleaseMouseCapture();
        
        this.Dragging = false;
    }
}
