﻿var isDragging = false;

var mouseDownX = 0;
var mouseDownY = 0;

/////////////////////////////////////////////////////////////////
//
//  Begin Map Manipulation Functions
//
function HandleDoubleClick(e)
{
    isDragging = false;
  
    if( document.getElementById(mapLat).value != '0' && document.getElementById(mapLon).value != '0' )
    {
        e = e || window.event;
        var src = e.srcElement || e.target;
        var root = document.documentElement||document.body;
        var target = src;
        
        if( target.id == mapImage || target.id == mapPanel )
        {
            ShowWait();
            
            var eventX = (e.clientX + root.scrollLeft) - document.getElementById(mapPanel).offsetLeft;
            var eventY = (e.clientY + root.scrollTop) - document.getElementById(mapPanel).offsetTop;

            var diffX = -300 + eventX; // -500 - document.getElementById(mapImage).style.left.replace('px','');
            var diffY = -300 + eventY; //-500 - document.getElementById(mapImage).style.top.replace('px','');
            
            var goalX = document.getElementById(mapImage).style.left.replace('px','') - diffX; 
            var goalY = document.getElementById(mapImage).style.top.replace('px','') - diffY; 
            
            document.getElementById(mapImage).style.left = goalX + 'px';
            document.getElementById(mapImage).style.top = goalY + 'px';
            //SlideMapToPoint( goalX, goalY, document.getElementById(mapImage).src);

            
            var degPerPixX = (diffX * ((document.getElementById(mapRadius).value / 400) / document.getElementById(mercatorPerDegreeX).value));
            var degPerPixY = (diffY * ((document.getElementById(mapRadius).value / 400) / document.getElementById(mercatorPerDegreeY).value));
            
            document.getElementById(mapLat).value = document.getElementById(mapLat).value - degPerPixY;
            document.getElementById(mapLon).value = document.getElementById(mapLon).value - 0 + degPerPixX;

            isDragging = false;

            __doPostBack(updateMapButton,'');
        }
    }
}

function HandleMouseDown(e)
{
    if( document.getElementById(mapLat).value != '0' && document.getElementById(mapLon).value != '0' )
    {
        e = e || window.event;
        var src = e.srcElement || e.target;
        var root = document.documentElement||document.body;
        var target = src;
        
        //alert( target.id );

        if( target.id == mapImage || target.id == mapPanel )
        {
            mouseDownX = (e.clientX + root.scrollLeft) - document.getElementById(mapPanel).offsetLeft;
            mouseDownY = (e.clientY + root.scrollTop) - document.getElementById(mapPanel).offsetTop;

            isDragging = true;

            return false;
        }
    }
}

function HandleMouseUp(e)
{
    if( isDragging )
    {
        var diffX = -100 - document.getElementById(mapImage).style.left.replace('px','');
        var diffY = -100 - document.getElementById(mapImage).style.top.replace('px','');
        
        if( Math.abs(diffX) > 2 || Math.abs(diffY) > 2 )
        {
            ShowWait();

            var degPerPixX = (diffX * ((document.getElementById(mapRadius).value / 400) / document.getElementById(mercatorPerDegreeX).value));
            var degPerPixY = (diffY * ((document.getElementById(mapRadius).value / 400) / document.getElementById(mercatorPerDegreeY).value));

            document.getElementById(mapLat).value = document.getElementById(mapLat).value - degPerPixY;
            document.getElementById(mapLon).value = document.getElementById(mapLon).value - 0 + degPerPixX;
            //document.getElementById(mapRadius).value = (0.015 + (Math.floor(document.getElementById(mapLat).value / 10) * 0.001)) * 3;

            //document.getElementById(mapImage).src = '/radiusMapImage.aspx?lat=' + document.getElementById(mapLat).value + '&lon=' + document.getElementById(mapLon).value + '&radius=' + document.getElementById(mapRadius).value + '&layers=' + document.getElementById(mapLayers).value;
            document.getElementById(mapImage).onload = RecenterMapImage;

            isDragging = false;
            
            __doPostBack(updateMapButton,'');
        }
        else
        {
            RecenterMapImage();
            isDragging = false;
        }
    }
}

function HandleMouseMove(e)
{
    if( isDragging )
    {
        e = e || window.event;
        var src = e.srcElement || e.target;
        var root = document.documentElement||document.body;
        
        var currentX = (e.clientX + root.scrollLeft) - document.getElementById(mapPanel).offsetLeft;
        var diffX = currentX - mouseDownX;
        var newX = document.getElementById(mapImage).style.left.replace('px','') - 0 + diffX;
        mouseDownX = currentX;

        var currentY = (e.clientY + root.scrollTop) - document.getElementById(mapPanel).offsetTop;
        var diffY = currentY - mouseDownY;
        var newY = document.getElementById(mapImage).style.top.replace('px','') - 0 + diffY;
        mouseDownY = currentY;

        //if( newX < 0 && newY < 0 && newX > -1000 && newY > -1000 )
        {
            document.getElementById(mapImage).style.left = newX + 'px';
            document.getElementById(mapImage).style.top = newY + 'px';
        }
    }
}

function SlideMapToPoint( x, y, src )
{
//alert( x + ' ' + y );
    if( document.getElementById(mapImage).src == src || ! CheckMapLoaded() )
    {
        var slidePx = 2;
        
        if( document.getElementById(mapImage).style.left.replace('px','') >= ( x + slidePx ) )
            document.getElementById(mapImage).style.left = ( document.getElementById(mapImage).style.left.replace('px','') - slidePx ) + 'px';
        else if( document.getElementById(mapImage).style.left.replace('px','') <= ( x - slidePx ) )
            document.getElementById(mapImage).style.left = ( document.getElementById(mapImage).style.left.replace('px','') - 0 + slidePx ) + 'px';
            
        if( document.getElementById(mapImage).style.top.replace('px','') >= ( y + slidePx ) )
            document.getElementById(mapImage).style.top = ( document.getElementById(mapImage).style.top.replace('px','') - slidePx ) + 'px';
        else if( document.getElementById(mapImage).style.top.replace('px','') <= ( y - slidePx ) )
            document.getElementById(mapImage).style.top = ( document.getElementById(mapImage).style.top.replace('px','') - 0 + slidePx ) + 'px';
            
        if( document.getElementById(mapImage).style.left.replace('px','') >= ( x + slidePx )
         || document.getElementById(mapImage).style.left.replace('px','') <= ( x - slidePx )
         || document.getElementById(mapImage).style.top.replace('px','') >= ( y + slidePx )
         || document.getElementById(mapImage).style.top.replace('px','') <= ( y - slidePx ) )
        setTimeout( 'SlideMapToPoint(' + x + ',' + y + ',' + src + ')', 50 );   
    }
}

function RecenterMapImage()
{
    document.getElementById(mapImage).style.left = '-100px';
    document.getElementById(mapImage).style.top = '-100px';

    HideWait();
}
//
//  End Map Manipulation Functions
//
/////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////
//
//  Begin Wait Indicator Functions
//
function ShowWait()
{
  document.getElementById(wait).style.display = '';
}

function HideWait()
{
  document.getElementById(wait).style.display = 'none';
}

function ToggleLayer(cb)
{
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == 'radio')
      {
         elm.checked = false;
      }
   }
   cb.checked = true;
}

//
//  End Wait Indicator Functions
//
/////////////////////////////////////////////////////////////////
