/* jQuery kgoogleMap Copyright Dylan Verheul <dylan@dyve.net>
 * Licensed like jQuery, see http://docs.jquery.com/License
 */
(function($) {
$.kgoogleMap = {
	maps: {},
	markers: {},//lista wszystkich markerow
	mm: {},//markermanager
	marker: function(m) {
		if (!m) {
			return null;
		} else if (m.lat == null && m.lng == null) {
			return $.kgoogleMap.marker($.kgoogleMap.readFromGeo(m));
		} else {
			var marker = new GMarker(new GLatLng(m.lat, m.lng));
			if (m.txt) {
				GEvent.addListener(marker, "click", function() {
    				marker.openInfoWindowHtml(m.txt);
  				});
			}
			//alert(m.id);
			//$.kgoogleMap.markers[m.id] = marker;
			
			return {marker:marker,info:m};
		}
	},
	readFromGeo: function(elem) {
		var latElem = $(".geo_lat", elem)[0];
		var idElem = $(".geo_id", elem)[0];
		var lngElem = $(".geo_lon", elem)[0];
		var txtElem = $(".geo_desc", elem)[0];
		var iconElem = $(".geo_icon", elem)[0];
		var zoomMinElem = $(".geo_zoom_min", elem)[0];
		var zoomMaxElem = $(".geo_zoom_max", elem)[0];
		if (latElem && lngElem) {
			//return { lat:parseFloat($(latElem).attr("title")), lng:parseFloat($(lngElem).attr("title")), txt:$(elem).attr("title") }
			return {lat:parseFloat($(latElem).attr("title")), 
				lng:parseFloat($(lngElem).attr("title")), 
				txt:$(txtElem).html(),
				id:$(idElem).attr('title'),
				zoomMin:$(zoomMinElem).attr('title'),
				zoomMax:$(zoomMaxElem).attr('title'),
				icon:$(txtElem).attr('href') }//todo: icon
		} else {
			return null;
		}
	},
	mapNum: 1,

//! Wysyluje funckje functiontoexecute ale wczesniej wczytuje API GoogleMaps
	execute : function(functiontoexecute){
			google.load('maps', '2',{callback:function(){
			jQuery.getScript("_kengine/javascript/jquery/kgooglemaps/markermanager.js",
			functiontoexecute)}});
	}

};


$.fn.kgoogleMap = function(lat, lng, zoom, options) {
	//return;
	// If we aren't supported, we're done
	// $.getScript("_kengine/javascript/jquery/kgooglemaps/markermanager.js");

	if (!window.GBrowserIsCompatible || !GBrowserIsCompatible()) return this;

	// Default values make for easy debugging
	if (lat == null) lat = 37.4419;
	if (lng == null) lng = -122.1419;
	if (!zoom) zoom = 13;

	// Sanitize options
	if (!options || typeof options != 'object')	options = {};
	options.mapOptions = options.mapOptions || {};
	options.markers = options.markers || [];
	options.controls = options.controls || {};

		// Map all our elements
		return this.each(function() {
			// Make sure we have a valid id
			if (!this.id) this.id = "gMap" + $.kgoogleMap.mapNum++;
			// Create a map and a shortcut to it at the same time
			var map = $.kgoogleMap.maps[this.id] = new GMap2(this, options.mapOptions);
			// Center and zoom the map
			map.setCenter(new GLatLng(lat, lng), zoom);
			// Add controls to our map
			for (var i = 0; i < options.controls.length; i++) {
				var c = options.controls[i];
				eval("map.addControl(new " + c + "());");
			}
			// If we have markers, put them on the map
			$.kgoogleMap.mm[this.id] = new MarkerManager(map);//przechowalnia markerow ktora uwzglednia widocznosc markerow na danym zoomie
			var marker = null;
			for (var i = 0; i < options.markers.length; i++) {
				markerinfo = $.kgoogleMap.marker(options.markers[i]);
				info = markerinfo['info'];
				if (marker = markerinfo['marker']) {
					map.addOverlay(marker);
					//alert(info.id);
					$.kgoogleMap.markers[info.id] = marker;
					//alert(markerinfo['info'].zoomMax);
					$.kgoogleMap.mm[this.id].addMarker(marker,info.zoomMin,info.zoomMax);		
				}
			}
			//$.kgoogleMap.mm.addMarkers($.kgoogleMap.markers,markerinfo['info'].zoomMin,markerinfo['info'].zoomMax);
			$.kgoogleMap.mm[this.id].refresh();
		});
}



})(jQuery);

