﻿//Controlador del comportamiento Panning con ratón
function WVMousePanCtrl()
{
    var oThis=this;
    var panBehavior;
    var viewer;
    var isPanning=false;
    var vPanIni; //punto inicial de desplazamiento de panning
    var vOffset; //desplazamiento a cada mousemove
    var enabled  = true; //indica si este controlador está operativo para afectar al visor
    
    this.getEnabled=function()
    {
        return enabled;
    }
    this.setEnabled=function(enable)
    {
        if (panBehavior!=null)
        {
            enabled = enable;
        }
    }
    
    this.init=function(visor)
    {
        viewer = visor;
        panBehavior = viewer.getSystemBehavior(WVBehaviorType.PANNING);
        if (panBehavior==null)
        {
            enabled=false;
        }
        else
        {
            viewer.getBrowser().registerEventMouseDown(viewer.getContainer(), onMouseDown);
            viewer.getBrowser().registerEventMouseMove(viewer.getContainer(), onMouseMove);
            viewer.getBrowser().registerEventMouseUp  (viewer.getContainer(), onMouseUp);
            
            vPanIni = new Vector2D();
            vOffset = new Vector2D();
        }
    }
    
    function onMouseDown(e)
    {
        if (enabled)
        {
            if (panBehavior!=null && panBehavior.getEnabled())
            {
                viewer.getContainer().focus();
                viewer.setCursor("move");
                
                if (!e) e = window.event;
                
                if (!isPanning)
                {
                    viewer.getBrowser().setCapture(viewer.getContainer(), onMouseMove, onMouseUp);
                    
                    vPanIni.x=viewer.getBrowser().mousepageX(e);
                    vPanIni.y=viewer.getBrowser().mousepageY(e);
                    vOffset.x = 0;
                    vOffset.y = 0;
                    isPanning = true;
                }
            }
        }
    }
    
    function onMouseMove(e)
    {
        if (enabled)
        {
            if (panBehavior.getEnabled())
            {
                if (!e) e = window.event;
                
                if (isPanning)
                {
                    var x =  viewer.getBrowser().mousepageX(e); 
                    var y =  viewer.getBrowser().mousepageY(e); 
                    
                    if (x!=vPanIni.x || y!=vPanIni.y)
                    {
                        vOffset.x += x - vPanIni.x;
                        vOffset.y += y - vPanIni.y;
                        
                        vPanIni.x= x;
                        vPanIni.y= y;
                        
                        //actualiza panning behavior
                        panBehavior.addOffsetVector(vOffset);
                        vOffset.x =0;
                        vOffset.y =0;
                    }
                }
            }
        }
    }
    
    function onMouseUp()
    {
        if (enabled)
        {
            if (panBehavior.getEnabled())
            {
                if (isPanning)
                {
                    viewer.resetCursor();                    
                    isPanning = false;
                    viewer.getBrowser().releaseCapture(viewer.getContainer());
                }
            }
        }
    }
}


