var zoom = 10;
var cityZoom = 13;
var map;
var marker;
var geocoder;
var addPointEvent;

$(document).ready(function(){
	$('#'+map_parent+'_map').addClass('gmaps');
	$('#'+map_parent+'_map_hints').hide();
	
	map = new GMap2($('#'+map_parent+'_map')[0]);
	map.addMapType(G_PHYSICAL_MAP);
	map.addControl(new GLargeMapControl());
	map.enableContinuousZoom();
	
	geocoder = new GClientGeocoder;
	
	// setup marker
	addPointEvent = GEvent.addListener(map, 'click', function(overlay, latlng) {
		addMarker(latlng);
	});
	
	// set center
	var map_lat = parseFloat($('input#'+map_parent+'_map_lat').val());
	var map_lng = parseFloat($('input#'+map_parent+'_map_lng').val());
	
	if(isNaN(map_lat))
	{
		map_lat = default_lat;
	}
	if(isNaN(map_lng))
	{
		map_lng = default_lng;
	}
	
	if(map_lat != 0 && map_lng != 0)
	{
		var point = new GLatLng(map_lat, map_lng);
		addMarker(point);
        map.setZoom(zoom);
	}
	else
	{
		changeCenter();
	}
});

$(document.body).unload(function() {
	if (GBrowserIsCompatible()) {
		GUnload();
	}
});


$('#city').blur(function() {changeCenter()});
function changeCenter()
{
	var city = $('#city').val();
	
	if(city)
	{
		getPoint('Polska, ' + city);
        map.setZoom(cityZoom);
	}
	else
	{
		var point = new GLatLng(default_lat, default_lng);
		addMarker(point);
	}
    
}

function getPoint(address)
{
	if(geocoder)
	{
		geocoder.getLocations(address, function(result)
		{
			map.clearOverlays();
			if(result.Status.code == G_GEO_SUCCESS)
			{
				$('#'+map_parent+'_map_hints ul').remove();
				$('#'+map_parent+'_map_hints').hide();
				if(result.Placemark.length > 1)
				{
					$('#'+map_parent+'_map_hints').show();
					$('<ul/>').addClass('ul').appendTo('#'+map_parent+'_map_hints')
					for(var i=0; i<result.Placemark.length; i++)
					{
						var point = new GLatLng(result.Placemark[i].Point.coordinates[1], result.Placemark[i].Point.coordinates[0]);
						addLocation(point, result.Placemark[i].address);
					}
				}
				else
				{
					var point = new GLatLng(result.Placemark[0].Point.coordinates[1], result.Placemark[0].Point.coordinates[0]);
					addMarker(point);
				}
			}
			else
			{
				//alert('Could not find '+ address + ' | Code: ' + result.Status.code);
				$('#map_specified_address', '#dialog').text(address);
				
				$("#dialog").dialog({
					bgiframe: true,
					modal: true,
					width: 500,
					buttons: {
						Ok: function() {
							$(this).dialog('close').dialog('destroy');
						}
					}
				});
			}
		});
	}
}

function addLocation(point, description)
{
	var mark = new GMarker(point);
	
	$('<li/>').html(description).click(function() {addMarker(point)}).appendTo('#'+map_parent+'_map_hints ul');
}

function addMarker(latlng)
{
	if(map.getCenter())
		map.panTo(latlng);
	else
		map.setCenter(latlng);
	
	map.clearOverlays();
	marker = new GMarker(latlng, {draggable: true});
	$('input#'+map_parent+'_map_lat').val(latlng.lat());
	$('input#'+map_parent+'_map_lng').val(latlng.lng());
	map.addOverlay(marker);
	
	var dragPoint = GEvent.addListener(marker, 'dragend', function(point) {
		$('input#'+map_parent+'_map_lat').val(point.lat());
		$('input#'+map_parent+'_map_lng').val(point.lng());
		map.panTo(point);
	});
	//GEvent.removeListener(addPointEvent);
}
