	var map = null;
    var geocoder = null;
    var address = '';
    var scale = 
    {
    	min: 1, 
    	max: 20,
    	convertScale: function(value) {
    		return Math.round((value/((this.max-this.min)+1))*100);
    	},
    	backConvertScale: function(value) {
    		return Math.round((value*((this.max-this.min)+1))/100);
    	}
    };

    $(document).ready(function() 
	{
		if (GBrowserIsCompatible() && document.getElementById("maps_canvas")) {
		    map = new GMap2(document.getElementById("maps_canvas"));
		    geocoder = new GClientGeocoder();
		    if (map_coords_1 != 0 && map_coords_2 != 0) {
		    	point = new GLatLng(map_coords_1, map_coords_2);
		    	placeMarker(point, map_address);
		    } else {
		    	map.setCenter(new GLatLng(34, 0), 1);
		    }
		    map.addControl(new GSmallMapControl());
    		map.addControl(new GMapTypeControl());
    		
    		// Check map zoom and save it into hidden field
    		GEvent.addListener(map, 'zoomend', function() {
                $("#map_zoom").val(scale.convertScale(map.getZoom()));
                map_zoom = scale.convertScale(map.getZoom());
        	});
        	
        	// Click on map event
			GEvent.addListener(map, 'click', function(overlay, point) {
				if (window.coords_by_click !== undefined && window.coords_by_click) {
					$("#map_coords_1").val(point.lat());
					$("#map_coords_2").val(point.lng());
					generateMap(true);
				}
			});

		}
	});

	function generateMap(coords_by_click) {
		latitude = $('#map_coords_1').val();
		longitude = $('#map_coords_2').val();
		$.post(getLocationArrayById_url, {location_id: selected_location_id}, function(data) {
			address = '';
			locations = '';
			for (i=data.length-1; i>0; i--) {
				locations += data[i].name;
				if (i > 1) {
					locations += ', ';
				}
			}
			// Attach country
			if (data.length)
				country = ', '+data[0].name;
			else
				country = '';
			zip = ' '+$('#zip_or_postal_index').val();
			if ($('#address_line_1').val())
				address += ' '+$('#address_line_1').val();
			if ($('#address_line_2').val())
				address += ', '+$('#address_line_2').val();
			address = address+locations+zip+country;

			if (manual_coords_block_opened || coords_by_click) {
				// Place existed Lat/Lng
				map.clearOverlays();
				$("#map_address").val(address);
				placeMarker(new GLatLng(latitude, longitude), address);
			} else {
				// Geocode by address
				geocoder.getLocations(address, addAddressToMap);
			}
		}, "json");
	}

	function addAddressToMap(response) {
		map.clearOverlays();
		if (!response || response.Status.code != 200) {
			alert("Sorry, we were unable to geocode that address");
		} else {
			place = response.Placemark[0];
			point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
			$("#map_coords_1").val(place.Point.coordinates[1]);
			$("#map_coords_2").val(place.Point.coordinates[0]);
			placeMarker(point, address);
		}
	}
	
	function placeMarker(point, address) {
		marker = new GMarker(point);
		map.setCenter(point, scale.backConvertScale(parseInt(map_zoom)));
		map.addOverlay(marker);
		var windowHtml = '';
		if (global_logo != '')
			windowHtml = '<img width="70px" align="left" style="float:left; padding-right:10px;" src="' + global_server_path + '/users_images/logos/' + global_logo + '">';
		windowHtml += '<b>' + global_title + '</b><br />' + address + '<div class="clear_float"></div>';
		marker.openInfoWindowHtml(windowHtml, {maxWidth:300});
	}
