﻿//Controlador del comportamiento Fence con ratón
function WVMouseFenceCtrl()
{
    var oThis=this;
    var enabled    = true; //indica si este controlador está operativo para afectar al visor
    
    var fenceBehavior;
    var browser     = null;
    var vFenceIni; //punto inicial de desplazamiento de Fence relativo a panel de visor
    var vFenceIniPage; //punto inicial de desplazamiento de Fence relativo a la página
    var minFenceWidth=20; //tamaños mínimos de fence
    var minFenceHeight=20;
    
    var fencing=false; //indica si se está efectuando operación de fence
    var viewer = null;
    
    this.getEnabled=function()
    {
        return enabled;
    }
    this.setEnabled=function(enable)
    {
        if (fenceBehavior!=null)
        {
            enabled = enable;
        }
    }
    
    this.init=function(visor)
    {
        viewer = visor;
        fenceBehavior  = viewer.getSystemBehavior(WVBehaviorType.FENCE);
        if (fenceBehavior==null)
        {
            enabled=false;
        }
        else
        {
            browser = viewer.getBrowser();
            browser.registerEventMouseDown(viewer.getContainer(), onMouseDown);
            browser.registerEventMouseMove(viewer.getContainer(), onMouseMove);
            browser.registerEventMouseUp  (viewer.getContainer(), onMouseUp);
            viewer.subscribeEvent(WVEventType.RIGHT_CLICK, onRightClick);
            vFenceIni=new Vector2D();
            vFenceIniPage=new Vector2D();
        }
    }
    
    function onRightClick(e)
    {
        if (enabled && fenceBehavior.getEnabled())
        {
            viewer.releaseBehavior();
        }
    }
    
    function onMouseDown(e)
    {
        if (!e) e = window.event; 
                    
        if (enabled)
        {
            if ( !fenceBehavior.getEnabled() || !viewer.getAllowZooming()) return;         
            
            if (!fencing)
            {
                viewer.setCursor("crosshair");         
                browser.setCapture(viewer.getContainer(), onMouseMove, onMouseUp);
                
                //coordenadas relativas del panel del visor
//                vFenceIni.x   = browser.mouseclientX(e); 
//                vFenceIni.y   = browser.mouseclientY(e);
                vFenceIni = browser.getOffSetMouseClient(e);
                
                //coordenadas relativas de página
                vFenceIniPage.x = browser.mousepageX(e);
                vFenceIniPage.y = browser.mousepageY(e);
                
                fencing=true;
            }
        }
    }
    
    function onMouseMove(e)
    {
        if (!e) e = window.event; 
        
        if (enabled)
        {
            if (!fenceBehavior.getEnabled() || !viewer.getAllowZooming())return;
            
            if (fencing)
            {
                var vCurrent=new Vector2D();
                vCurrent.x   = browser.mousepageX(e);
                vCurrent.y   = browser.mousepageY(e);
                
                var x = Math.min(vCurrent.x, vFenceIniPage.x);
                var y = Math.min(vCurrent.y, vFenceIniPage.y);
                
                var w=Math.abs(vCurrent.x - vFenceIniPage.x);
                var h=Math.abs(vCurrent.y - vFenceIniPage.y);
                w= w<minFenceWidth ? minFenceWidth : w;
                h= h<minFenceHeight ? minFenceHeight : h;
                
                //ajustamos ventana en base al desplazamiento de los vectores de inicio para panel y página
                var offsetx = vFenceIniPage.x - vFenceIni.x;
                var offsety = vFenceIniPage.y - vFenceIni.y;
                
                fenceBehavior.setWindowSize(x - offsetx, y - offsety, w, h);
            }
        }
    }
    
    function onMouseUp(e)
    {
        if (!e) e = window.event; 
        
        if (enabled)
        {
            if (!fenceBehavior.getEnabled() || !viewer.getAllowZooming())return;
            
            if (fencing)
            {     
                fencing=false;
                fenceBehavior.makeZoom();
                browser.releaseCapture(viewer.getContainer());
                //viewer.releaseBehavior();
            }
        }
    }
}


