/**
 * Obsługa Google Maps API
 *
 */
gmaps =
{
	map: null,
	geocoder: null,
	reversegeocoder: null,
	
	init: function(map_control, map_type_control) {
		if ( $("#gmaps").get(0) ) {
			if (GBrowserIsCompatible()) {
				this.map = new GMap2(
					document.getElementById("gmaps"),
					{
						draggableCursor: "default"
					}
				);
				this.geocoder = new GClientGeocoder();
				if ( typeof(GReverseGeocoder) != "undefined" ) {
					this.reversegeocoder = new GReverseGeocoder(this.map);
				}
				
				
				// przy zamykaniu strony usuwamy obiekt mapy
				window.onunload = function() {
					GUnload();
				};
				
				// dodanie kontrolek do mapy
				if ( map_control == undefined || map_control == 1 ) {
					map_control = 1;
					this.map.addControl(new GLargeMapControl());
				}
				else if ( map_control != undefined && map_control == 2 ) {
					this.map.addControl(new GSmallMapControl());
				}
				if ( map_type_control == undefined || map_type_control ) {
					map_type_control = true;
					this.map.addControl(new GMapTypeControl());
				}
				
				// zastąpienie tekstów elementów mapy
				this.zastap_teksty(map_control, map_type_control);
				
				// inicjalizacja przyciemnienia mapy
				this.przyciemnienie.prototype = new GOverlay();
				this.przyciemnienie.prototype.initialize = function(map) {
					
					var div = document.createElement("div");
					div.style.position = "absolute";
					div.innerHTML = '<div style="width:100%;height:100%;background:#000;overflow:hidden;filter:alpha(opacity=20);-moz-opacity:.2;opacity:.2;z-index: 100;"></div>';
					map.getPane(G_MAP_MAP_PANE).appendChild(div);
					
					this._map = map;
					this._div = div;
				};
				this.przyciemnienie.prototype.remove = function(){
					this._div.parentNode.removeChild(this._div);
				};
				this.przyciemnienie.prototype.redraw = function(force) {
				
					var map_offset = { x: 0, y: 0 };
					if ( this._div.parentNode.parentNode.style.left ) {
						map_offset.x = this._div.parentNode.parentNode.style.left.match(/([\-0-9]+)/)[0]/1;
					}
					if ( this._div.parentNode.parentNode.style.top ) {
						map_offset.y = this._div.parentNode.parentNode.style.top.match(/([\-0-9]+)/)[0]/1;
					}
				
					this._div.style.top = (map_offset.y*(-1))+"px";
					this._div.style.left = (map_offset.x*(-1))+"px";
					
					if (!force) return;
					
					this._div.style.width = this._map.getSize().width+"px";
					this._div.style.height = this._map.getSize().height+"px";
					
				};
				// dodanie przyciemnienie na mapę
				if (!(/MSIE 8/.test(navigator.userAgent))) {
					this.map.addOverlay(new this.przyciemnienie());
				}
				
				// inicjalizacja dymka
				this.dymek.prototype = new GOverlay();
				this.dymek.prototype.initialize = function(map) {
					/*
						Efekty dla dymków tylko pod FF
					*/
					var efekty = false;
					if (/Firefox/.test(navigator.userAgent)) {
						efekty = true;
					}
					var ie6 = false;
					if (/MSIE 6/.test(navigator.userAgent)) {
						ie6 = true;
					}
					
					var div = document.createElement("div");
					div.id = "dymek";
					div.style.position = 'absolute';
					//div.style.marginTop = map.fromLatLngToDivPixel(this.marker.getPoint()).y + 'px';
					//div.style.marginLeft = map.fromLatLngToDivPixel(this.marker.getPoint()).x + 'px';
					
					switch(this.dane.dymek_rodzaj) {
						case "gwiazda":
							var html = gmaps_dymki_tpl.gwiazda;
							break;
						case "miejsce":
							if ( this.dane.link && this.dane.link != "" ) {
								var html = gmaps_dymki_tpl.miejsce;
							}
							else {
								var html = gmaps_dymki_tpl.miejsce_nolink;
							}
							break;
						case "namierzenie":
							var html = gmaps_dymki_tpl.namierzenie;
							break;
						case "namierzenie_dodaj":
							var html = gmaps_dymki_tpl.namierzenie_dodaj;
							break;
						case "miejsca_polacz":
							var html = gmaps_dymki_tpl.miejsca_polacz;
							break;
						case "wybierz_punkt":
							var html = gmaps_dymki_tpl.wybierz_punkt;
							break;
						default:
							var html = "";
					}
					
					// zdjęcia mini
					var zdjecia_mini = "";
					if ( typeof(this.dane.zdjecia_mini) != "undefined" && this.dane.zdjecia_mini ) {
						var zdjecia_mini_html = new Array();
						var indeks = 0;
						var klasa = "";
						for(i in this.dane.zdjecia_mini) {
							indeks == this.dane.zdjecia_mini.length-1
								? klasa = ' class="l"'
								: klasa = "";
							
							if ( this.dane.link ) {
								zdjecia_mini_html[i] = '<li'+klasa+'><a href="'+this.dane.link+'"><img src="'+this.dane.zdjecia_mini[i]+'" width="36" height="28" alt="zdjęcie" /></a></li>';
							}
							else {
								zdjecia_mini_html[i] = '<li'+klasa+'><img src="'+this.dane.zdjecia_mini[i]+'" width="36" height="28" alt="zdjęcie" /></li>';
							}
							
							indeks++;
						}
						zdjecia_mini = "<ul>"+zdjecia_mini_html.join("")+"</ul>";
					}
					html = html.replace("{ZDJECIA_MINI}", zdjecia_mini);
					
					// klasa DIV-a
					if ( typeof(this.dane.zdjecia_mini) != "undefined" && this.dane.zdjecia_mini && this.dane.zdjecia_mini.length > 0 ) {
						switch(this.dane.dymek_rodzaj) {
							case "gwiazda":
								this.dane.klasa = "chm-gwi-fot";
								break;
							case "miejsce":
								this.dane.klasa = "chm-nam-fot";
								break;
							case "namierzenie":
								this.dane.klasa = "chm-nam-fot";
								break;
							default:
								this.dane.klasa = "";
						}
					}
					else {
						switch(this.dane.dymek_rodzaj) {
							case "gwiazda":
								this.dane.klasa = "gwi";
								break;
							case "miejsce":
								this.dane.klasa = "chm-nam";
								break;
							case "namierzenie":
								this.dane.klasa = "chm-nam";
								break;
							default:
								this.dane.klasa = "";
						}						
					}
					
					// umieszczanie danych w szablonie
					for(i in this.dane) {
						
						html = html.replace(new RegExp("{"+i.toUpperCase()+"}", "g"), this.dane[i]);
					}
					
					// jeśli nie ma linku, to usunięcie elementu linku
			
					div.innerHTML = html;
					
					if ( efekty ) {
						div.style.display = 'none';
					}
					if ( ie6 ) {
						div.style.behavior = "url("+config.base_url+"client/css/iepngfix.htc)";
					}
					
					if ( typeof(this.close) !== "undefined" ) {
						div.onclick = this.close;
					}

					map.getPane(G_MAP_FLOAT_PANE).appendChild(div);
					this._map = map;
					this._div = div;
					
					if ( efekty ) {
						$("#dymek").fadeIn("slow");
					}
					
				};
				this.dymek.prototype.remove = function(){
					this._div.parentNode.removeChild(this._div);
				};
				this.dymek.prototype.redraw = function(force) {
					if (!force) return;
					
					this._div.style.marginTop = this._map.fromLatLngToDivPixel(this.marker.getPoint()).y-9 + 'px';
					this._div.style.marginLeft = this._map.fromLatLngToDivPixel(this.marker.getPoint()).x-11 + 'px';
					
					// przesunięcie mapy, jeśli dymek się nie mieści
					var map_offset = { x: 0, y: 0 };
					if ( this._div.parentNode.parentNode.style.left ) {
						map_offset.x = this._div.parentNode.parentNode.style.left.match(/([\-0-9]+)/)[0]/1;
					}
					if ( this._div.parentNode.parentNode.style.top ) {
						map_offset.y = this._div.parentNode.parentNode.style.top.match(/([\-0-9]+)/)[0]/1;
					}

					var offset = { x: 0, y: 0 };
					var max_x = this._div.style.marginLeft.match(/([\-0-9]+)/)[0]/1+this._div.clientWidth+map_offset.x;
					if ( max_x > this._map.getSize().width ) {
						offset.x = this._map.getSize().width-max_x;
					}
					var max_y = this._div.style.marginTop.match(/([\-0-9]+)/)[0]/1+this._div.clientHeight+map_offset.y;
					if ( max_y > this._map.getSize().height ) {
						offset.y = this._map.getSize().height-max_y;
					}
					
					if ( offset.x || offset.y ) {
						this._map.panBy(new GSize(offset.x, offset.y));
					}
					
					
				};
			}
		}
		
	},
	
	zastap_teksty_ile_prob: 0,
	zastap_teksty: function( map_control, map_type_control ) {
		this.zastap_teksty_ile_prob++;
		var gotowe = true;
		var gmaps_div = $("#gmaps");
		
		if ( map_control ) {
			if ( gmaps_div.find("div[log='pan_up']").get(0) ) {
				gmaps_div.find("div[log='pan_up']").attr("title", locale.gmaps_pan_up);
				gmaps_div.find("div[log='pan_down']").attr("title", locale.gmaps_pan_down);
				gmaps_div.find("div[log='pan_lt']").attr("title", locale.gmaps_pan_lt);
				gmaps_div.find("div[log='pan_rt']").attr("title", locale.gmaps_pan_rt);
				gmaps_div.find("div[log='center_result']").attr("title", locale.gmaps_center_result);
				gmaps_div.find("div[log='zi']").attr("title", locale.gmaps_zi);
				gmaps_div.find("div[log='zo']").attr("title", locale.gmaps_zo);
			}
			else {
				gotowe = false;
			}
		}
		
		if ( map_type_control ) {
			if ( gmaps_div.find("#amtc_option_0").get(0) ) {
				gmaps_div.find("#amtc_option_0")
					.attr("title", locale.gmaps_amtc_option_0_title)
					.children("div").text(locale.gmaps_amtc_option_0);
				gmaps_div.find("#amtc_option_1")
					.attr("title", locale.gmaps_amtc_option_1_title)
					.children("div").text(locale.gmaps_amtc_option_1);
				gmaps_div.find("#amtc_option_2")
					.attr("title", locale.gmaps_amtc_option_2_title)
					.children("div").text(locale.gmaps_amtc_option_2);
			}
			else {
				gotowe = false;
			}
		}
		
		if ( !gotowe && this.zastap_teksty_ile_prob < 100 ) {
			window.setTimeout( function() { gmaps.zastap_teksty(map_control, map_type_control); }, 10 );
		}
	},
	
	/**
	 * Wyszukanie podanego adresu i wycentrowanie mapy w znalezionym punkcie
	 *
	 * adres - szukany adres
	 * wyswietl_domyslna - jeśli true, to w przypadku,gdy odnalezienie adresu jest niemożliwe, wyświetlona zostaje domyślna lokalizacja
	 * callback - funkcja callback(status, data) - status przyjmuje wartości true/false, data to obiekt zwracany przez Geocoder
	 *
	 */
	znajdz_adres: function(adres, wyswietl_domyslna, callback) {
		if ( wyswietl_domyslna == undefined ) {
			var wyswietl_domyslna = false;
		}
	
		this.geocoder.getLocations(
			adres,
			function(data) {
				var status = true;
			
				// jeśli miejsce nie jest w Polsce
				if ( !data || data.Status.code != 200 || data.Placemark[0].AddressDetails.Country.CountryNameCode != "PL" ) {
					var status = false;
					
					if ( wyswietl_domyslna ) {
						// mapa Polski
						gmaps.map.setCenter( new GLatLng(52.025459, 19.204102), 5);
					}
					
					komunikaty.pokaz('err', locale.zgl_kom_tytul, locale.zgl_kom_err_zla_miejscowosc, '', '');
					//komunikaty.ustaw_przyciski();
				}
				// jeśli znaleziono miejsce i miejsce jest w Polsce
				else {
					//console.debug(data);
					gmaps.map.setCenter(
						new GLatLng(data.Placemark[0].Point.coordinates[1], data.Placemark[0].Point.coordinates[0]),
						15
					);
				}
				
				if ( callback != undefined ) {
					callback(status, data);
				}
			}
		)
	},
	
	
	// dymek na mapie z danymi gwiazdy/miejsca
	dymek: function(marker, dane, close) {
		this.marker = marker;
		
		if ( typeof(dane) !== "undefined" ) {
			this.dane = dane;
		}
		else {
			this.dane = {};
		}
		
		if ( typeof(close) !== "undefined" ) {
			this.close = close;
		}
	},
	
	// przyciemnienie mapy
	przyciemnienie: function() {
	},
	
	// markery VNG
	marker: function( latlng, rodzaj ) {
		if ( typeof(rodzaj) == "undefined" ) {
			var rodzaj = null;
		}
		
		switch(rodzaj) {
			case "red":
				var params = {
					img: "blank.gif",
					img_width: 22,
					img_height: 23,
					anchor_x: 11,
					anchor_y: 11,
					shadow: "marker-red.png",
					shadow_width: 32,
					shadow_height: 29,
					zIndexProcess: 1
				};
				break;
			case "green":
			default:
				var params = {
					img: "blank.gif",
					img_width: 22,
					img_height: 23,
					anchor_x: 11,
					anchor_y: 11,
					shadow: "marker-green.png",
					shadow_width: 32,
					shadow_height: 29
				};
		}
	
		var markerIkona = new GIcon();
		markerIkona.image = config.base_url + "client/img/"+params.img;
		markerIkona.shadow = config.base_url + "client/img/"+params.shadow;
		markerIkona.iconSize = new GSize(params.img_width, params.img_height);
		markerIkona.iconAnchor = new GPoint(params.anchor_x, params.anchor_y);
		markerIkona.infoWindowAnchor = new GPoint(params.anchor_x, params.anchor_y);
		markerIkona.shadowSize = new GSize(params.shadow_width, params.shadow_height);
		
		var parametry = {
			icon:markerIkona
		};
		if ( params.zIndexProcess ) {
			parametry.zIndexProcess = function() { return params.zIndexProcess };
		}
		
		var marker = new GMarker(
			latlng,
			parametry
		);
		
		return marker;
	}
}

