//Create a closure to avoid exposing properties and functions to the outside world
(function($){
	var defaultZoom = 11;
	var gmapsObj = null;
	
	$.fn.map = function(mapId){
		var props = $.fn.map.getProperties($(this));
		if(props.lat != null && props.lng != null){
			var geoPt = new GLatLng(props.lat, props.lng);
			initMap(mapId, geoPt);
			
			var bounds = new GLatLngBounds();
			var pts = new Array();
			
			$(this).each(function(){
				props = $.fn.map.getProperties(this);
				geoPt = new GLatLng(props.lat, props.lng);
				bounds.extend(geoPt);
				pts.push(geoPt);
				$.fn.map.addMarker(geoPt, props.desc, new GIcon(G_DEFAULT_ICON));
			});
			
			if($(this).size() > 1){
				gmapsObj.setZoom(gmapsObj.getBoundsZoomLevel(bounds) - 1);
			}
			gmapsObj.setCenter($.fn.map.getApprCenterLatLng(pts));
		}
	}
	
	$.fn.map.getProperties = function(coordEmt){
		var lat = $(coordEmt).find(".lat:first").html();
		var lng = $(coordEmt).find(".lng:first").html();
		var desc = $(coordEmt).find(".desc:first").html();
		return {lat: lat, lng: lng, desc: desc};
	}
	
	$.fn.map.addMarker = function(geoPt, desc, icon){
		var marker = new GMarker(geoPt, icon);
		marker.bindInfoWindowHtml(desc);
		gmapsObj.addOverlay(marker);
	}
	
	$.fn.map.getApprCenterLatLng = function(ptArr){
		var sumLat = 0;
		var sumLng = 0;
		
		for(var i = 0; i < ptArr.length; i++){
			sumLat += ptArr[i].lat();
			sumLng += ptArr[i].lng();
		}
		
		return new GLatLng((sumLat / ptArr.length), (sumLng / ptArr.length));
	}
	
	function initMap(emtId, geoPt){
		gmapsObj = new GMap2(document.getElementById(emtId));
		gmapsObj.setUIToDefault();
		gmapsObj.setCenter(geoPt, defaultZoom);
		gmapsObj.checkResize();
		gmapsObj.setCenter(geoPt, defaultZoom);
	}
})(jQuery);



var Geopos = {
	currentLatId: null,
	currentLngId: null,
	
	geocoder: new GClientGeocoder(),
	
	geocodeSlot: function(addrId, latId, lngId){
		Geopos.currentLatId = latId;
		Geopos.currentLngId = lngId;
		var addrEmt = document.getElementById(addrId);
		
		Geopos.geocoder.getLatLng(addrEmt.getElementsByTagName("div")[0].innerHTML, Geopos.handleGeocoding);
	},
	
	handleGeocoding: function(point){
		document.getElementById(Geopos.currentLatId).getElementsByTagName("div")[0].innerHTML = point.lat();
		document.getElementById(Geopos.currentLngId).getElementsByTagName("div")[0].innerHTML = point.lng();
		if(!window.Save || !Save.u4_disabled){top.main.postData();}
	}
}