/// <reference path="Support.js" />

///-codeFile-//////////////////////////////////////////////////////////////////
// MouseTracker.js
//
// Written by Doug Greenall (douggreenall.co.uk)
// Copyright (c) 2008 Doug Greenall
//
// Feel free to use this code in any of your own personal projects but please
// leave this notice and my details intact. This code may not be used for any
// commercial projects without explicit permission
///////////////////////////////////////////////////////////////////////////////


///-class-/////////////////////////////////////////////////////////////////////
// MouseTracker
///////////////////////////////////////////////////////////////////////////////
function MouseTracker()
{
    ///-data-//////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////

    this._buttonDown = false;

    this._position = new Vector2D(0, 0);
    this._lastPosition = new Vector2D(0, 0);
    this._offset = new Vector2D(0, 0);

    this._timer = 0;
    this._acceleration = new Vector2D(0, 0);


    ///-events-////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////

    var This = this;

    if (window.document.addEventListener)
    {
        window.document.addEventListener("mousedown", function(Event) { This._buttonDown = true; }, false);
        window.document.addEventListener("mouseup", function(Event) { This._buttonDown = false; }, false);
        window.document.addEventListener("mousemove", function(Event) { This.Move(Event); }, false);
    }
    else if (window.attachEvent)
    {
        window.document.attachEvent("onmousedown", function(Event) { This._buttonDown = true; });
        window.document.attachEvent("onmouseup", function(Event) { This._buttonDown = false; });
        window.document.attachEvent("onmousemove", function(Event)
        {
            if (window.event)
                This.Move(window.event);
            else
                This.Move(Event);
        });
    }

    ///-methods-///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////

    this.Move = function(Event)
    {
        ++this._timer;

        this._lastPosition = this._position.Clone();
        this._position = new Vector2D(Event.clientX + window.document.body.scrollLeft, Event.clientY + window.document.body.scrollTop);

        this._offset.AddVec(this._position.Clone().SubVec(this._lastPosition));
        this._acceleration = this._offset.Clone().DivVal(this._timer);
    };

    this.Reset = function()
    {
        this._offset._x = 0;
        this._offset._y = 0;

        this._timer = 0;

        this._acceleration._x = 0;
        this._acceleration._y = 0;
    };
}

