var map      = null;
//var bounds   = new GLatLngBounds();

var startLat    = 38.851672;
var startLon    = -91.946152;
var startZoom   = 8;
var gmarkers    = Array();
var geocoder    = null;
var pointHolder = null;
var gbounds     = null;

function loadGMap(oid,startlat, startlon,startzoom,width,height) {
	if(!oid) {
		oid = "map1";
	}
	if(!startzoom) {
		startzoom = startZoom;
	}
	
	if (GBrowserIsCompatible() && document.getElementById(oid)) {
		
		if (width) {
			document.getElementById(oid).style.width = width + "px";
		}
		if (height) {
			document.getElementById(oid).style.height = height + "px";
		}
		
		map = new GMap2(document.getElementById(oid));
		map.setCenter(new GLatLng( startlat, startlon), startzoom);
		map.addControl(new GSmallMapControl());
		
		geocoder = new GClientGeocoder();
		gbounds  = new GLatLngBounds();
	}
}

function newGMarker(lat,lon,content,listId) 
{
	
	//if (GLatLng && GMarker) {
		point = new GLatLng(lat,lon);
		var marker = new GMarker(point);
		
		gbounds.extend(point);
		map.addOverlay(marker);
		gmarkers[listId] = marker;
		
		GEvent.addListener(marker, "click", 
		function() {
			marker.openInfoWindowHtml(content);
			
		});
	//}
}

function gMapSetBounds() 
{
	map.setCenter(gbounds.getCenter());
	alert(getBoundsZoomLevel(gbounds));
	map.getZoom(getBoundsZoomLevel(gbounds));
}

function focusMarker (listId)
{
	if (gmarkers[listId]) {
		GEvent.trigger(gmarkers[listId], "click");
	}
}

jQuery(document).ready(function(){
	
	jQuery("a.core-list-mapicon").click(function () {
		var theId = jQuery(this).attr('rel');
		focusMarker(theId);
		return;
		
	});	
	
	jQuery("#core-get-coords").click(function () {
		getNewPoint();
		
	});		
});

function getNewPoint() 
{
	var formAddress = jQuery("#core_address").val();
	var formZip = jQuery("#core_zip").val();
	var sendAddress = formAddress + " " + formZip;
	var formTitle = jQuery("#core_title").val();
	var itemId = jQuery("#core_location_id").val();
	var windowContent = "<strong>" + formTitle + "</strong><br />" + sendAddress;
	if (formAddress && formZip) {
		jQuery("#core_address").removeClass("field-invalid");
		jQuery("#core_zip").removeClass("field-invalid");
		
		if (!geocoder) {
			geocoder = new GClientGeocoder();	
		}
		geocoder.getLatLng(
			sendAddress,
			function(point) {
				if (!point) {
					pointHolder = null;
					setMessage(false);
				} else {
					pointHolder = point;
					assignCoords(point);
					setMessage(true);
					loadGMap('core_listing_gmap',point.lat(), point.lng(),15,510,330);
					newGMarker(point.lat(), point.lng(),windowContent,itemId);
					focusMarker(itemId);
					
				}
			}
		);
		
	} else {
		jQuery("#core_address").addClass("field-invalid");
		jQuery("#core_zip").addClass("field-invalid");
		jQuery("#core-coord-message").addClass("core-fail-message");
		jQuery("#core-coord-message").html("Address and Zip must both be filled out.");
	}
}

function assignCoords(point)
{
	jQuery("#core_lat").val(point.lat());
	jQuery("#core_lon").val(point.lng());
											   
}

function setMessage(success) 
{
	if (success) {
		jQuery("#core-coord-message").removeClass("core-fail-message");
		jQuery("#core-coord-message").addClass("core-success-message");
		jQuery("#core-coord-message").html("Got new coordinates! Please check map below.<br />Please save form to continue.");
		jQuery("#core_lat").addClass("field-alert");
		jQuery("#core_lon").addClass("field-alert");
	} else {
		jQuery("#core-coord-message").removeClass("core-success-message");
		jQuery("#core-coord-message").addClass("core-fail-message");
		jQuery("#core-coord-message").html("Coordinates not found. Try new address/zip.");
	}
}

function editFormValidate()
{
	var formAddress = jQuery("#core_address").val();
	var formZip = jQuery("#core_zip").val();
	var formLat = jQuery("#core_lat").val();
	var formLon = jQuery("#core_lon").val();
	
	if ( (formAddress && formZip) && (!formLat || !formLon)) {
		var question = confirm ("Do you want to check for map coordinates before saving?");
		
		if (question) {
			getNewPoint();
			return false;
		} else {
			return true;	
		}
	}
	
	//return false;
}