var map = null;
var marker = null; //only one marker allowed
var lat = 37.36252, lng = -122.03476; //Silicon Valley, California
var zoom = 1;
//initial default coords, possible template placeholders

$(document).ready(function(){
    $("#map_location").dialog({
        autoOpen: false,
        width: 640,
        height: 480,
        modal: true,
        draggable: false,
        resizable: false,
        open: function(){
            loadMaps();
        },
        buttons: {
            "Add Location to Post": function() {
                $(this).dialog("close");
                //save coords obtained to hidden fields of main form
                $("#lat")[0].value = lat.toFixed(5);
                $("#lng")[0].value = lng.toFixed(5);
                NoticeDataLocation();
            },
            "Cancel": function() {
                $(this).dialog("close");
            }
        }
    });
});

function showGMarker(point)
{
    if (marker)
    {
        marker.setLatLng(point);
        zoom = map.getZoom();
    }
    else //need to create marker and add listeners to it:
    {
        marker = new GMarker(point, {draggable: true});
        GEvent.addListener(marker, "dragend", function() {
            var curPos = marker.getLatLng();
            lat = curPos.lat();
            lng = curPos.lng();
        });
        map.addOverlay(marker);
    }
    map.setCenter(point, zoom);
}

function mapsLoaded()
{
    if (!map) //initialization block - run only once:
    {
        $("#map_canvas").show();
        map = new google.maps.Map2(document.getElementById("map_canvas"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
    }
    var address = $("#address")[0].value;
    if (address.length >= 3) //address was entered
    {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(address, gc_callback);
    }
    else //display previous (or default) location
    {
        var center = new GLatLng(lat, lng);
        showGMarker(center);
    }
}

function loadMaps()
{
    if (typeof google !== "undefined")
    {
        google.load("maps", "2", {"callback" : mapsLoaded});
    }
}

function gc_callback(point)
{
    if (point)
    {
        showGMarker(point);
        //store new location:
        lat = point.lat();
        lng = point.lng();
    }
    else
    {
        //fallback to default location
        point = new GLatLng(lat, lng);
        showGMarker(point);
    }
}

function showDialog()
{
    $("#map_location").dialog('open');
}
