﻿var m_map;
var m_address;
var m_lat;
var m_lng;
var m_zoom;
var m_city;
var m_region;
var m_country;
var m_markerImage;
var m_maxZoom;
var m_exactLocation = true;
var m_draggable = true;

$addHandler(window, "load", LoadMap);

function LoadMap() 
{
  if (GBrowserIsCompatible()) 
  {
    m_address = GetGServerVar('hdAddress').value;
    m_country = GetGServerVar('hdCountry').value;
    m_region = GetGServerVar('hdRegion').value;
    m_city = GetGServerVar('hdCity').value;
    m_lat = GetGServerVar('hdLat').value;
    m_lng = GetGServerVar('hdLng').value;
    m_zoom = GetGServerVar('hdZoom').value;
    m_markerImage = GetGServerVar('hdMarkerImage').value;
    m_maxZoom = GetGServerVar('hdMaxZoom').value;
    
    if (GetGServerVar('hdDraggableMarker').value == 'False')
        m_draggable = false;
        
    if (GetGServerVar('hdShowExactLocation').value == 'False')
        m_exactLocation = false;
    
    if (!m_address)
        m_address = m_city + "," + m_region + "," + m_country;
    
    m_map = new GMap2(document.getElementById("map"));
    m_map.addControl(new GMapTypeControl());
    m_map.addControl(new GSmallMapControl());
    
    GEvent.addListener(m_map,'zoomend',function(oldZoom,newZoom) 
    { 
        if (newZoom > m_maxZoom)
            m_map.zoomOut()
    }
    
    );

    ShowLocation();
  }
}

function ShowLocation() 
{  
    if ((m_lat.length > 0) && (m_lng.length > 0) && ((m_lng != 0) || (m_lng != 0) || (m_zoom != 0)) )
    {
       ViewLocation(new GLatLng(m_lat,m_lng),m_zoom);
    }
    else if (m_address.length > 0)
    {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(m_address,    
                           function(point)
                           {
                            if (!point)
                            {
                                ViewLocation(new GLatLng(-26.202269947517024,28.030929565429688),5);
                            } 
                            else
                            {
                                ViewLocation(point,11);
                            }
                           }
                          );
    } 
}

function ViewLocation(point,zoom)
{
    if (m_map == null)
        return;
        
    m_map.clearOverlays();
    m_map.setCenter(point, parseInt(zoom));
    
    if (!m_exactLocation)
    {
        var lat = parseFloat(point.lat());
        var lng = parseFloat(point.lng());
      
        var polygonArray = new Array();
      
        var radius = 0.005;
        var steps = 150;
        for (var i = 0; i < steps; i++) 
        {
            var x = (lat + radius * Math.cos(2 * Math.PI * i / steps));
            var y = (lng + radius * Math.sin(2 * Math.PI * i / steps));
            polygonArray[i] = new GLatLng(x,y);
        }
        
        var x = (lat + radius * Math.cos(2 * Math.PI * 0 / steps));
        var y = (lng + radius * Math.sin(2 * Math.PI * 0 / steps));
        polygonArray[steps] = new GLatLng(x,y);
        
        var polygon = new GPolygon(polygonArray, "#f33f00", 0, 1, "#ff0000", 0.4);
      
        m_map.addOverlay(polygon);
    }
    else
    {
        var marker = new GMarker(point, {draggable: m_draggable});
        GEvent.addListener(marker, "dragend", function() {
            SaveLocation(marker);
          });
          
        if ((m_markerImage != null) && (m_markerImage.length > 0))
            marker.setImage(m_markerImage);
        
        m_map.addOverlay(marker);  
    }
}

function SaveLocation(marker)
{
    if (m_map == null)
        return;
        
    var latLng = m_map.getCenter();
    if (marker)
        latLng = marker.getLatLng();
        
    GetGServerVar('hdLat').value = latLng.lat();
    GetGServerVar('hdLng').value = latLng.lng();
    GetGServerVar('hdZoom').value = m_map.getZoom();
}

function GetGServerVar(clientID)
{
    return $get($get("hdGModuleID").value + "_" + clientID);
}

function pageUnload()
{
    GUnload();
}