﻿///////////////////////////////////////////////////////////////////////////////
//
//  Grid
//
//  Shows a map of elements using Virtual Earch.
//
///////////////////////////////////////////////////////////////////////////////

var BASEURL = "http://www.theendlesswave.com/" ;

// Global Vars
var map = null ;
var mapElements = null ;
var ItemsToDraw = null ;
var rootCanvas = null ;
var cLat = 34.188260 ;
var cLon = -118.848971 ;
var cLatb4 = cLat ;
var cLonb4 = cLon ;
var zoomlevel = 5 ;

function CalcDistInMiles( lat, lon )
{
     var x = 69.10 * (lat - cLat);
     var y = 69.10 * ((lon - cLon) * Math.cos(lat / 57.30));
     var dist = Math.abs(Math.sqrt((x * x) + (y * y)));
     return dist ;
}

function OnMapElements( result )
{
    if( result != null ) {
        if( map == null )
        {
            map = new VEMap('map');
            var pt = new VELatLong(cLat, cLon) ;
            map.LoadMap( pt, zoomlevel, VEMapStyle.Road, false);
            map.HideDashboard() ;
            window.setTimeout( function() {
                map.SetTileBuffer(2);
                map.ShowDashboard();
                }, 2250 ) ;
        }
        if (result.Items.length > 0) {
            AddElements( result ) ;
            CenterAndZoomMap( result ) ;
            window.setTimeout( function() { KickIt() ; } , 3500 ) ;
        }        
    }
}

function CenterAndZoomMap( result )
{
    var minLat = 9000.0 ;
    var minLon = 9000.0 ;
    var maxLon = -9000.0 ;
    var maxLat = -9000.0 ;
    var latset = 0 ;
    var len = result.Items.length;
    for (var i=0; i<len; i++) {
        if( result.Items[i].IsGeoCoded > 0 ) 
        { // Loop through the items
            latset++ ;
            var lat = ( result.Items[i].sLat * 1.0 );
            var lon = ( result.Items[i].sLon * 1.0 );
            if( lat > maxLat ) maxLat = lat ; 
            if( lat < minLat ) minLat = lat ; 
            if( lon > maxLon ) maxLon = lon ; 
            if( lon < minLat ) minLon = lon ; 
            if( latset == 1 ) {
                cLat = lat ;
                cLon = lon ;
                ElementToMoveTo = result.Items[i] ;
            }    
        }
    }
    
    if( latset > 0 )
    {
         var zoomDesired = 5 ;
         
         var MaxDist = CalcDistInMiles( maxLat, maxLon ) ;
         
         var dist2 = CalcDistInMiles( maxLat, minLon ) ;
         if( dist2 > MaxDist ) MaxDist = dist2 ;
         dist2 = CalcDistInMiles( minLat, minLon ) ;
         if( dist2 > MaxDist ) MaxDist = dist2 ;
         dist2 = CalcDistInMiles( minLat, maxLon ) ;
         if( dist2 > MaxDist ) MaxDist = dist2 ;
         
         zoomDesired = 1 ;
         if( MaxDist > 3000.0 ) zoomDesired = 2 ;
         else if( MaxDist > 1500.0 ) zoomDesired = 3 ;
         else if( MaxDist > 700.0 ) zoomDesired = 4 ;
         else if( MaxDist > 300.0 ) zoomDesired = 5 ;
         else if( MaxDist > 150.0 ) zoomDesired = 6 ;
         else if( MaxDist > 90.0 ) zoomDesired = 7 ;
         else if( MaxDist > 40.0 ) zoomDesired = 8 ;
         else if( MaxDist > 20.0 ) zoomDesired = 9 ;
         else if( MaxDist > 10.0 ) zoomDesired = 10 ;
         else if( MaxDist > 5.0 ) zoomDesired = 11 ;
         else if( MaxDist > 2.5 ) zoomDesired = 12 ;
         else if( MaxDist > 1.0 ) zoomDesired = 13 ;
         else if( MaxDist > 0.7 ) zoomDesired = 14 ;
         else zoomDesired = 15 ;

         zoomlevel = zoomDesired ;

         map.PanToLatLong(new VELatLong(cLat, cLon)); 
         map.SetZoomLevel(zoomlevel) ;  

    }
}         

function AddElements( result )
{
    var icdiv = "<div class='mapicon'><img src='";
    var infdiv = "<div class='mapbubble'>"
    
    map.DeleteAllShapes();
    mapElements = new Array() ;
    var pinid = 0 ;
    var len = result.Items.length;
    for (var i=0; i<len; i++) {
        if( result.Items[i].IsGeoCoded > 0 ) 
        { // Loop through the items
            var lat = ( result.Items[i].sLat * 1.0 );
            var lon = ( result.Items[i].sLon * 1.0 );
            
            var shape = new VEShape(VEShapeType.Pushpin, new VELatLong(lat, lon));

            //Create the icon
            var icon = icdiv + result.Items[i].ThumbnailUrl + "' height=24 width=24 /></div>" ; 
            shape.SetCustomIcon(icon);

            shape.SetTitle( "<span style='font-weight: bold; color: #FFF; padding: 2px; display: block; background-color: #000; font-size: 0.9em;'>" + result.Items[i].Title + "</span>");
            shape.SetDescription(infdiv + icdiv + result.Items[i].ThumbnailUrl + "' style='padding: 1px;' /></div>" + result.Items[i].Description + "</div>");
            shape.SetMoreInfoURL(result.Items[i].DetailsURL);
            //shape.SetPhotoURL( result.Items[i].ThumbnailUrl );
            //Add the shape the the map
            map.AddShape(shape);
            
            var f = new Object() ;
            f.shape = shape ;
            f.DetailsURL = result.Items[i].DetailsURL ;     
            f.ThumbnailUrl = result.Items[i].ThumbnailUrl ;     
            mapElements[pinid] = f ;    
            pinid++;
        }
    }
}

var ElementToMoveTo = null ;
var ElementCenteredOn = null ;
var zindex = 3000 ;

function KickIt()
{
    if( ElementToMoveTo != null && ElementCenteredOn != ElementToMoveTo ) {
        var icdiv = "<div class='mapicon'><img src='";
        for( var t = 0 ; mapElements != null && mapElements[t] != null && ElementCenteredOn != null && ElementCenteredOn.DetailsURL != null ; t++ ) {
            if( mapElements[t] != null && mapElements[t].DetailsURL == ElementCenteredOn.DetailsURL ) {
            var icon = icdiv +  mapElements[t].ThumbnailUrl + "' height=24 width=24 /></div>" ; 
            mapElements[t].shape.SetCustomIcon(icon);
            }
        }
        
        ElementCenteredOn = ElementToMoveTo ;
        
        var lat = ( ElementCenteredOn.sLat * 1.0 );
        var lon = ( ElementCenteredOn.sLon * 1.0 );
        map.PanToLatLong(new VELatLong(lat, lon));
              
        var icdiv = "<div class='mapicon_over'><img src='";
        for( var t = 0 ; mapElements != null && mapElements[t] != null && ElementCenteredOn != null && ElementCenteredOn.DetailsURL != null ; t++ ) {
            if( mapElements[t] != null && mapElements[t].DetailsURL == ElementCenteredOn.DetailsURL ) {
            var icon = icdiv +  mapElements[t].ThumbnailUrl + "' height=48 width=48 /></div>" ; 
            mapElements[t].shape.SetCustomIcon(icon);
            mapElements[t].shape.SetZIndex(zindex++);
            }
        }
    }    
    // check again in a few secs
    window.setTimeout( function() { KickIt() ; } , 2500 ) ;
}

function OnMapElementOver( Element )
{
    window.status = Element.Name ;
    if( Element.IsGeoCoded > 0 && ElementToMoveTo != Element )
        ElementToMoveTo = Element ;
}

function OnMapElementOut( Element )
{
    window.status = Element.Name ;
    if( ElementToMoveTo == Element )
        ElementToMoveTo = null ;
}
