function LatinoWebMiniViewer()
{
    var divMiniFrame;
    var parentID;
    var linkViewer;
    var scale;
    var x, y;
    var puntero=null; //imagen de posición en el minivisor
    var divWidth;
    var divHeight;
    
    var imgWH=30; //tamaño del puntero en px
    var urlMap;
    var timerID=null;
    var oThis=this;
    var browser=null;
    
    this.SetScale=function(s)
    {
        scale=s;
    }
    
    this.Init=function (parentId, linkedViewer, xx, yy, GUID, urlM, showPointer)
    {
        urlMap          = urlM;
        parentID        = parentId;
        linkViewer      = linkedViewer;
        x               = xx;
        y               = yy;
        divMiniFrame    = document.getElementById(parentID+"_divMiniFrame");
        divWidth        = parseInt(divMiniFrame.style.width);
        divHeight       = parseInt(divMiniFrame.style.height);
        puntero         = document.getElementById(parentID+"_imgHere");
        puntero.style.width=imgWH;
        puntero.style.height=imgWH;
                
        //transparencia del puntero animado
        if (puntero.style.opacity!=null)
            puntero.style.opacity=".50";
        else
            puntero.style.filter="alpha(opacity=50)";
            
        document.getElementById(parentID+"_imgBackground").onload=function(){this.style.display="block";};
        
        var oThis=this;
        if (document.addEventListener) 
		{
			divMiniFrame.addEventListener("mousedown", function (e) { oThis.MouseDown(e); } , false);
			if (showPointer)
			{
			    divMiniFrame.addEventListener("mouseover", function (e) { puntero.style.display="NONE"; } , false);
			    divMiniFrame.addEventListener("mouseout", function (e) { puntero.style.display="BLOCK"; } , false);
			}
		}
		else
		{
			divMiniFrame.onmousedown=function () {oThis.MouseDown(null);}
			if (showPointer)
			{
			    divMiniFrame.onmouseover=function () {puntero.style.display="NONE";}
			    divMiniFrame.onmouseout=function () {puntero.style.display="BLOCK";}
			}
		}
		
		//Plot(GUID);
		document.getElementById(parentID+"_imgBackground").src = "MapServer.ashx?op=10&VisorID="+GUID;
		InitMap();
    }
    
    function InitMap()
    {
        if (linkViewer!=null && !linkViewer.isLoaded())
        {
            setTimeout(InitMap, 1000);
            return;
        }
		if (linkViewer!=null)
        {
            browser = linkViewer.getBrowser();
            browser.registerEventMouseMove(linkViewer.getContainer(),OnLinkViewerMouseMove);
        }
    }
    
    function Plot(GUID)
    {
		var url="MapServer.ashx?op=3&VisorID="+GUID;
		var cnx = new HttpConnector();
        cnx.init(20000);
        cnx.connect(url, plotResult, plotError);
    }
    
    function plotResult()
    {
        document.getElementById(parentID+"_imgBackground").src = urlMap;
        if (linkViewer!=null)
        {
            browser = linkViewer.getBrowser();
            browser.registerEventMouseMove(linkViewer.getContainer(),OnLinkViewerMouseMove);
        }
    }
    
    function plotError()
    {
    }
    
    function OnLinkViewerMouseMove(e)
    {
        if (!e) e = window.event; 
        
        updatePointer();
    }
    
    function updatePointer()
    {
        if (scale>0)
        {
            var p = linkViewer.getCurrentUtm();
            
            if (!isNaN(p.x) && !isNaN(p.y))
            {
                puntero.style.left=WorldToLocalX(p.x)-(imgWH>>1)+"px";
                puntero.style.top=WorldToLocalY(p.y)-(imgWH>>1)+"px";
            }
        }
    }
    
    this.MouseDown=function (e)
    {
        if (linkViewer!=null)
        {
            if (ElementTarget(e).getAttribute("puntero")==null)
            {
                var utmX=LocalToWorldX(OffsetX(e));
                var utmY=LocalToWorldY(OffsetY(e));
                linkViewer.Locate( utmX , utmY );
            }
        }
    }
    
    function LocalToWorldX(xP)
    {
        var xCenter=divWidth >> 1; 
        return x + Math.round((xP-xCenter)*scale);
    }
    
    function LocalToWorldY(yP)
    {
        var yCenter=divHeight >> 1; 
        return y - Math.round((yP-yCenter)*scale);
    }
    
    function WorldToLocalX(utmX)
    {
        var xCenter=divWidth >> 1; 
        return xCenter + Math.round((utmX-x)/scale);
    }
    
    function WorldToLocalY(utmY)
    {
        var yCenter=divHeight >> 1;
        return yCenter - Math.round((utmY-y)/scale);
    }
    
    function OffsetX (e)
	{
	    if (!e) e = event;
		return (document.all)? e.offsetX: e.layerX;
	}
	
	function OffsetY (e)
	{
	    if (!e) e = event;
		return (document.all)? e.offsetY: e.layerY;
	}
	
	function ElementTarget(e)
	{
	    if (!e) e = event;
	    return(document.all)? e.srcElement: e.target;
	}
}