﻿
function GridCell(x,y)
{
    this.x = x;
    this.y = y;

    var lng = gen.m_gridOriginX + (x * gen.m_gridCellWidth) + (gen.m_gridCellWidth / 2);
    var lat = gen.m_gridOriginY + (y * gen.m_gridCellHeight) + (gen.m_gridCellHeight / 2);
    
    this.m_point = new GLatLng(lat, lng);
    this.m_marker = null;
}

GridCell.prototype.m_createMarker = function()
{
    var l_icon = new GIcon();
    l_icon.image = "mk/red.png";
    l_icon.iconSize = new GSize(11,11);
    l_icon.iconAnchor =  new GPoint(5,5);
    l_icon.infoWindowAnchor = new GPoint(5,0);        
            
    var l_cellMarker = new GMarker(this.m_point, {"icon":l_icon});
    map.addOverlay(l_cellMarker);
    
    this.m_marker = l_cellMarker;
    
    var l_point = this.m_point;
    
    // click handler    
    GEvent.addListener(l_cellMarker, 'click', function() 
    {
        map.setCenter(l_point, 14);
        
        gen.m_zoomEnd();
    });

}

Gen.prototype.m_initGrid = function()
{
    // determine bounds
    var l_bounds = new GLatLngBounds();
    
    for (var i in this.m_routeList)
    {
        var l_route = this.m_routeList[i];
        
        for (var j in l_route.m_points)
        {
            l_bounds.extend(l_route.m_points[j]);
        }
    }
    
    var l_swX = l_bounds.getSouthWest().lng();
    var l_swY = l_bounds.getSouthWest().lat();
    var l_neX = l_bounds.getNorthEast().lng();
    var l_neY = l_bounds.getNorthEast().lat();
    
    var l_width = l_neX - l_swX;
    var l_height = l_neY - l_swY;

    // set up grid    

    this.m_gridOriginX = -40;
    this.m_gridOriginY = 20;

    this.m_gridCellWidth = 0.016;
    this.m_gridCellHeight = 0.012;
    
    this.m_gridList = [];
    
    for (var i in this.m_routeList)
    {
        var l_route = this.m_routeList[i];
        
        var l_cellBounds = new GLatLngBounds();
        
        for (var j in l_route.m_points)
        {
            l_cellBounds.extend(l_route.m_points[j]);
        }

        // TEST: moved from j loop above ...
        var l_centre = l_cellBounds.getCenter();
        
        var l_gridX = parseInt((l_centre.lng() - this.m_gridOriginX) / this.m_gridCellWidth);
        var l_gridY = parseInt((l_centre.lat() - this.m_gridOriginY) / this.m_gridCellHeight);
        
        var l_gridIndex = l_gridY * 10000 + l_gridX;
        
        if (!this.m_gridList[l_gridIndex])
        {
            var l_cell = new GridCell(l_gridX, l_gridY);
            
            this.m_gridList[l_gridIndex] = l_cell;
        }
    }
    
    /* for (var i in this.m_gridList)
    {
        var l_cell = this.m_gridList[i];
        l_cell.m_createMarker();
    } */
}


Gen.prototype.m_displayGrid = function(p_visible)
{
    var z = map.getZoom();
    for (var i in this.m_gridList)
    {
        var l_cell = this.m_gridList[i];
        var l_marker = l_cell.m_marker;
        
        if (!l_marker)
        {
            if (p_visible)
            {
                l_cell.m_createMarker();
            }
        }
        else
        {
            if (p_visible)
            {
                l_marker.show();
            }
            else
            {
                l_marker.hide();
            }
        }
    }
}


/*

                // _TODO
                var pz = l_marker.m_place.z;
                if (pz >= z)
                {
                
                }
                else
                {
                    l_marker.hide();
                }
                
                */                
