var map;
var marker;

var initializeMapRaw, initializeMap, createMap, createMarker, createMarkerIcon, createDefaultZoomControl;

function prepMap() {
	$(window).unload(function(){
	    GUnload();
	});

	createDefaultZoomControl = function(map) {
		
		var zoomControl = new GSmallZoomControl();
		map.addControl(zoomControl);
		
		return zoomControl;
	}
	
	createMarkerIcon = function() {
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.image = '/resources/images/vrfresh/map_house_icon.png';
		icon.shadow = '/resources/images/vrfresh/map_house_shadow.png';
		icon.transparent = '/resources/images/vrfresh/map_house_trans.png';
		icon.iconSize = new GSize(40, 35);
		icon.shadowSize = new GSize(52, 35);
		icon.iconAnchor = new GPoint(20, 30);
		icon.infoWindowAnchor = new GPoint(30, 10);
		icon.imageMap = [1,14, 19,2, 39,14, 39,19, 37,21, 37,34, 3,34, 3,21, 1,19];
		
		return icon;
	}

	createMarker = function(map) {
	
		var marker = new GMarker(map.getCenter(), 
		  {
			clickable: false,
			draggable: false,
			icon: createMarkerIcon()
		  });
		
		map.addOverlay(marker);
	
		return marker;
	}

	createMap = function(latLng, zoomLevel) {
	
		if (!latLng) {
		    latLng = new GLatLng(37.4419, -122.1419);
		}
		
		if (!zoomLevel) {
			zoomLevel = 13;
		}
	
		var map = new GMap2(document.getElementById("map_canvas"));
		map.disableDragging();
		
		// get array of map types
		var mapTypes = map.getMapTypes();
		
		// overwrite the getMinimumResolution() and getMaximumResolution() methods for each map type
		for (var i=0; i<mapTypes.length; i++) {
			mapTypes[i].getMaximumResolution = function() {return zoomLevel;}
		}
		map.setCenter(latLng, zoomLevel);
	
		return map;
	}

	initializeMap = function(latLng, zoomLevel, hasMarker) {
	      if (GBrowserIsCompatible()) {
			map = createMap(latLng, zoomLevel);
			if (hasMarker) {
				marker = createMarker(map);
			}
			createDefaultZoomControl(map);
	      }
	}
	
	initializeMapRaw = function(latitude, longitude, zoomLevel, hasMarker) {
		initializeMap(new GLatLng(latitude, longitude), zoomLevel, hasMarker);
	}
}