/*
$Id:
Copyright(C) 1996-2005 INCREMENT P CORP.
*/
function CMovableCursor( oMap )
{
    var oOwner = this;
    this.oTrueTargPos   = oMap.CreateLonLatInt( 0, 0 );
    this.oVirtualTargPos    = oMap.CreateLonLatInt( 0, 0 );

    var bLockTarget     = false;
    var bIgnoreEvent    = false;
    var nCenterDiffX    = 0;
    var nCenterDiffY    = 0;

    var oImgMoveCursor  = oMap.document.createElement( "img" );
    oImgMoveCursor.src = strDocRoot + "movcsr.gif";
    oImgMoveCursor.style.position   = "absolute";
    oImgMoveCursor.style.left       = 0;
    oImgMoveCursor.style.top        = 0;
    oImgMoveCursor.style.zIndex = 1000;
    oImgMoveCursor.style.display = 'none';
    var oLayer = oMap.document.getElementById( "Layer" );
    oLayer.appendChild( oImgMoveCursor );

    this.OnChangedPosition = function( nLongitude, nLatitude )
    {
        if( bIgnoreEvent )
        {
            bIgnoreEvent = false;
            return;
        }

        if( oOwner.oVirtualTargPos.Longitude == nLongitude &&
            oOwner.oVirtualTargPos.Latitude  == nLatitude )
        {
            var oTarget = oMap.GetViewPoint(    oOwner.oTrueTargPos.Longitude,
                                oOwner.oTrueTargPos.Latitude );
            var oCenter = oMap.GetViewPoint( nLongitude, nLatitude );
            nCenterDiffX    = oTarget.PixelX - oCenter.PixelX;
            nCenterDiffY    = oTarget.PixelY - oCenter.PixelY;
            bLockTarget = true;
        }
        else
        {
            nCenterDiffX = 0;
            nCenterDiffY = 0;
            bLockTarget = false;
        }
    }

    this.OnChangedScale = function( nScale )
    {
        if( bLockTarget )
        {
            var oRet = oMap.PixelToLonLatSize( nCenterDiffX, nCenterDiffY, nScale );
            oMap.Longitude = oOwner.oTrueTargPos.Longitude - oRet.Longitude;
            oMap.Latitude  = oOwner.oTrueTargPos.Latitude  + oRet.Latitude;
            bIgnoreEvent = true;
        }
    }

    this.OnDraw = function()
    {
        oImgMoveCursor.style.left   = CMN_GetWindowWidth(  oMap.window )/2 - 16 + nCenterDiffX;
        oImgMoveCursor.style.top    = CMN_GetWindowHeight( oMap.window )/2 - 16 + nCenterDiffY;
    }

    return  this;
}
