﻿//Comportamiento para Panning
function WVPanning()
{
    var oThis=this;
    var viewer = null;
    var behaviorType = WVBehaviorType.PANNING; //tipo de comportamiento
    var enabled  = false; //indica si este comportamiento está operativo para afectar al visor
    
    var vOffset = null; //vector de scrolling
    var lstCustomFinalize = new Array();
    var lstCustomInit       = new Array();
    
    this.getEnabled=function()
    {
        return enabled;
    }
    
    this.setEnabled=function(enable)
    {
        enabled = enable;
    }
    
    //retorna si el comportamiento debe estar siempre activo
    this.alwaysKeepEnabled=function()
    {
        return false;
    }
    
    this.init = function (visor)
    {
        viewer = visor;
        vOffset = {x:0,y:0};
        callCustomInit();
    }
    
    this.addOffsetVector=function(vector)
    {
        if (viewer.getAllowPanning())
        {
            //acumula desplazamiento para cuando toque actualizar
            vOffset.x += vector.x;
            vOffset.y += vector.y;
        }
    }
    
    this.getBehaviorType=function()
    {
        return behaviorType;
    }
    
    this.onUpdate = function ()
    {
        if (vOffset.x!=0 || vOffset.y!=0)
        {
            viewer.addOffset(vOffset); //pasa al visor desplazamiento acumulado
            vOffset = {x:0,y:0};
        }
    }
    
    this.finalize=function()
    {
        callCustomFinalize(); 
        lstCustomFinalize = new Array();
        lstCustomInit     = new Array();
    }
    //Suscribe los metodos a invocar cuando se finalice el comportamiento
    this.registerCustomFinalize = function(cfinalize)
    {
        lstCustomFinalize.push(cfinalize);
    }
    
    //Elimina los metodos a invocar cuando se finalice el comportamiento
    this.unregisterCustomFinalize = function (cfinalize)
    {
        for (var i=0;i<lstCustomFinalize.length;i++)
            if (lstCustomFinalize[i]==cfinalize)
            {
                lstCustomFinalize.splice(i,1);
                break;
            }
    }
    //Invocacion cuando se finalice el comportamiento de los metodos agregados  
    function callCustomFinalize()
	{
        var n   = lstCustomFinalize.length;
        if ( n == 0 )return;
        for( var i = 0; i < n; i++ )
            lstCustomFinalize[i]();
	}
	//Suscribe los metodos a invocar cuando inicie el comportamiento
    this.registerCustomInit = function(cinit)
    {
        lstCustomInit.push(cinit);
    }
    
    //Elimina los metodos a invocar cuando inicie el comportamiento
    this.unregisterCustomInit = function (cinit)
    {
        for (var i=0;i<lstCustomInit.length;i++)
            if (lstCustomInit[i]==cinit)
            {
                lstCustomInit.splice(i,1);
                break;
            }
    }
    //Invocacion cuando inicie el comportamiento de los metodos agregados  
    function callCustomInit()
	{
        var n   = lstCustomInit.length;
        if ( n == 0 )return;
        for( var i = 0; i < n; i++ )
            lstCustomInit[i]();
	}
}

