/* definiujemy ikonki */

var icon_normal = new GIcon();
icon_normal.image = _base+"marker_icon/marker_20_red.png";
icon_normal.shadow = _base+"/marker_icon/mm_20_shadow.png";
icon_normal.iconSize = new GSize(12, 20);
icon_normal.shadowSize = new GSize(20, 18);
icon_normal.iconAnchor = new GPoint(6, 20);
icon_normal.infoWindowAnchor = new GPoint(5, 1);	

var icon_blink = new GIcon(icon_normal);
icon_blink.image = +_base+"marker_icon/marker_20_pointer_3.gif";

var icon_blue = new GIcon(icon_blue);
icon_blue.image = _base+"marker_icon/marker_20_blue.png";
icon_blue.shadow = _base+"marker_icon/mm_20_shadow.png";
icon_blue.iconSize = new GSize(12, 20);
icon_blue.shadowSize = new GSize(20, 18);
icon_blue.iconAnchor = new GPoint(6, 20);
icon_blue.infoWindowAnchor = new GPoint(5, 1);	

var icon_brown = new GIcon(icon_brown);
icon_brown.image = _base+"marker_icon/marker_20_brown.png";
icon_brown.shadow = _base+"marker_icon/mm_20_shadow.png";
icon_brown.iconSize = new GSize(12, 20);
icon_brown.shadowSize = new GSize(20, 18);
icon_brown.iconAnchor = new GPoint(6, 20);
icon_brown.infoWindowAnchor = new GPoint(5, 1);

var icon_purple = new GIcon(icon_purple);
icon_purple.image = _base+"marker_icon/marker_20_purple.png";
icon_purple.shadow = _base+"marker_icon/mm_20_shadow.png";
icon_purple.iconSize = new GSize(12, 20);
icon_purple.shadowSize = new GSize(20, 18);
icon_purple.iconAnchor = new GPoint(6, 20);
icon_purple.infoWindowAnchor = new GPoint(5, 1);

var icon_yellow = new GIcon(icon_yellow);
icon_yellow.image = _base+"marker_icon/marker_20_yellow.png";
icon_yellow.shadow = _base+"marker_icon/mm_20_shadow.png";
icon_yellow.iconSize = new GSize(12, 20);
icon_yellow.shadowSize = new GSize(20, 18);
icon_yellow.iconAnchor = new GPoint(6, 20);
icon_yellow.infoWindowAnchor = new GPoint(5, 1);

var icon_white = new GIcon(icon_white);
icon_white.image = _base+"marker_icon/marker_20_white.png";
icon_white.shadow = _base+"marker_icon/mm_20_shadow.png";
icon_white.iconSize = new GSize(12, 20);
icon_white.shadowSize = new GSize(20, 18);
icon_white.iconAnchor = new GPoint(6, 20);
icon_white.infoWindowAnchor = new GPoint(5, 1);

var icon_green = new GIcon(icon_green);
icon_green.image = _base+"marker_icon/marker_20_green.png";
icon_green.shadow = _base+"marker_icon/mm_20_shadow.png";
icon_green.iconSize = new GSize(12, 20);
icon_green.shadowSize = new GSize(20, 18);
icon_green.iconAnchor = new GPoint(6, 20);
icon_green.infoWindowAnchor = new GPoint(5, 1);

/* Funkcja wczytuje wybraną zawartość zakładki na mapę */

function changeOfferView(type, subtype, search){
	changeOpac(85, 'pleaseWait')
	ukryj('errorDIV');	
	pokaz('pleaseWait');
	OfferList = "";
	CategoryList = "";	
	divTab = [];
	CategoryLabels = [];
	removeMarkers();
	delete gmarkers;
	gmarkers = [];
	i = 0;
	
	if( search ) {
		parseXMLdataForMarkers( _path+"includes/lib/oferty/xml_output.php?"+search );
	}
	else{
		parseXMLdataForMarkers( _path+'includes/lib/oferty/xml_output.php?type='+type+'&subtype='+subtype );
	}
}

/* Funkcja usuwa wszystkie markery z mapy */

function removeMarkers(){
	for (var i=0; i < gmarkers.length; i++) {
		gmarkers[i].remove();
	}
}

/* Funkcja inicuje mapę */

function loadGoogleMap( SimpleControll ) {
	
	if(SimpleControll){
		changeOpac(85, 'pleaseWait');
		//pokaz('pleaseWait');
	}
	
	if (GBrowserIsCompatible()) {
	
		// inicjujemy mapę
		map = new GMap2(document.getElementById("map_canvas"));
	    
		// centrujemy mapę na środku Polski na poziomie 6 
		map.setCenter(new GLatLng(51.95, 19.12), 6);
	
		// zdejmujemy niepotrzebne warstwy i dodajemy mapę plastyczną
		map.addMapType(G_PHYSICAL_MAP);
		map.setMapType(G_PHYSICAL_MAP);
		map.removeMapType(G_HYBRID_MAP);
		map.removeMapType(G_SATELLITE_MAP);		
		
		// dodajemy obsługę powiększenia przez zaznaczenie 
		if(SimpleControll){
			var boxStyleOpts = {opacity: .2,border: "1px dotted #e74013"}		
			var otherOpts = {
				buttonHTML: '<img title="zaznacz obszar do powiększenia" alt="zaznacz obszar do powiększenia" src="'+_base+'zoom_ico.gif" />',
				buttonZoomingHTML: '<img src="'+_base+'zoom_ico.gif" />',
				buttonStartingStyle: {width: '15px', height: '15px', marginTop:'-47px', marginLeft:'46px'}
			};		
			map.addControl(new DragZoomControl(boxStyleOpts, otherOpts));
		}
		
		// dodajemy obiekty kontroli 
		map.addControl(new GMapTypeControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());		
		map.addControl(new GOverviewMapControl());		
		map.hideControls();
		
		// pozwalamy na scrolownie myszą 
		if(SimpleControll){
			//map.enableScrollWheelZoom(); 
		}
		
		// pozwalamy na zoom podwójnym kliknięciem 
		map.enableDoubleClickZoom();
	
		// popzwalamy na zoom ciągły 
		map.enableContinuousZoom();		

		// ukrywamy nawigację gdy kursor nie jest nad mapą 
		GEvent.addListener(map, "mouseover", function(){map.showControls();});  
		GEvent.addListener(map, "mouseout", function(){map.hideControls();});  
	
	    // dodajemy obiekt geolokalizacji
		geocoder = new GClientGeocoder();		  

	}
}

/*
Funkcja pobiera lokalizację pojedynczego adresu

address - sformatowany adres zapytania dla geolokalizacji 
htmlContnet - sformatowana tresc infoOkna
*/

function showAddress(address, htmlContnet, saveXY, typ, ID, alternativ_address, attempt) {
	if (geocoder) {
		geocoder.getLatLng(
		address,
			function(point) {
				if (!point) {
					var mapErrorObj = document.getElementById('MapNotFound');
					if(mapErrorObj){
						if(attempt==1){
							ukryj('map_canvas');
							pokaz('MapNotFound');						
						}
						else{
							showAddress(alternativ_address, htmlContnet, saveXY, typ, ID, 1);
						}
					}
				} else {
					map.setCenter(point, 10);
					
					// jeżeli przyszło dodatkowe polecenie zapisania wspolrzednych x i y do bazy 
					if(saveXY){
						saveGeocodedLocation(point, typ, ID);
					}

					var marker = new GMarker(point);
					map.addOverlay(marker);
					marker.openInfoWindowHtml(htmlContnet);
					
					GEvent.addListener(marker, "click", function() {
						marker.openInfoWindowHtml(htmlContnet);
					});
					
				}
			}
		);
	}
}

/*
Funkcja wyświetla marker na mapie o wskazanych wspolrzednych

x - wspolrzedna x punktu
y - wspolrzedna y punktu
htmlContnet - sformatowana tresc infoOkna
*/

function placeMarker(x, y, htmlContnet) {
	
	var point = new GLatLng( x, y)
	
	map.setCenter(point, 10);
	
	var marker = new GMarker(point);
	map.addOverlay(marker);
	marker.openInfoWindowHtml(htmlContnet);
					
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(htmlContnet);
	});	

}

/*
Funkcja obsługuje zapisanie pobranych wspolrzednych geograficznych do bazy 
*/

function saveGeocodedLocation(point, typ, ID){
	var req = mint.Request();
	var path = _path+'includes/lib/common/googleMapLocation.php';
	req.AddParam("location", point);
	req.AddParam("typ", typ);
	req.AddParam("ID", ID);
 	req.Send(path, 'googleDebug');
}


/*
Funkcja pobiera listę wpisów do zaznaczenia na mapie do pliku xml, następnie parsuje go

XMLfile - lokalizacja pliku generujacego XML z lista wpisów
*/

function parseXMLdataForMarkers( XMLfile ){

	// pobieramy pliki XML i parsujemy go 
	GDownloadUrl(XMLfile, function(data, responseCode) {
		
		var xml = xml = GXml.parse(data);
		var punkty = xml.documentElement.getElementsByTagName("location");
		var marker = [];
		var grupy = [];
		var bounds = new GLatLngBounds();
		
		if( punkty.length == 0 ){
			pokaz('errorDIV');
			return false;
		}
		
		// dla wszystkich znalezionych wpisow 
		for (var i = 0; i < punkty.length; i++) {

			// jeżeli sa podane wspolrzedene punktu to od razu dodajemy punkt
			if( punkty[i].getAttribute("lat") != "" && punkty[i].getAttribute("lng") != "" ){
				var point = new GLatLng(parseFloat(punkty[i].getAttribute("lat")), parseFloat(punkty[i].getAttribute("lng")));
				
				var divID = punkty[i].getAttribute("id");
				var label = punkty[i].getAttribute("miasto");
				var infoWindow = punkty[i].getAttribute("google_infoWindow");
				var offerList = punkty[i].getAttribute("offerList");
				var grupa_ID = punkty[i].getAttribute("grupa_ID");
				var nazwa_grupy = punkty[i].getAttribute("nazwa_grupy"); 
				var ikonka = punkty[i].getAttribute("ikonka"); 
				
				marker[i] = createMarker(point, label, infoWindow, offerList, grupa_ID, ikonka);
				//marker[i].setTooltip(label);
				
				divTab[i] = divID;
				
				grupy[i] = grupa_ID;
				CategoryLabels[grupa_ID] = nazwa_grupy;
							
				map.addOverlay(marker[i]);
				bounds.extend(point);			
			}
		}

		// tworzymy listę offert do umieszczenia pod mapą 
		document.getElementById("OfferListKontener").innerHTML = OfferList;	
		
		// tworzymy listę dostępnych kategorii 
		document.getElementById("CategoryList").innerHTML = makeCategoryList(grupy);	
		
		// ukrywamy wartwe "loading"
		ukryj('pleaseWait');
		
		var zoomLevel = map.getBoundsZoomLevel(bounds);
		map.setZoom(zoomLevel);		
		
		var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) / 2;
		var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) / 2;
		map.setCenter(new GLatLng(clat, clng));
		
	});
	
}

/*
Funkcja obsluguje budowanie listy dostpenych grup markerow 
*/

function makeCategoryList(grupy){
	
	var list = '';
	var oldName = '';
	var newName = '';
	grupy.sort();
	for (var i = 0; i < grupy.length; i++) {
		oldName = grupy[i];
		
		if(oldName != newName){
			list += '<label class="label"><input type="checkbox" id="MarkerGroup_'+grupy[i]+'" checked="checked" onclick="boxclick(this, \''+grupy[i]+'\')" /> '+CategoryLabels[grupy[i]]+'</label>';
		}
		
		newName = oldName;
	}
	return list;	
}

/*
Funkcja obsługuje umieszczenie PdMarkera na mapie
*/

function createMarker(point, label, infoWindow, offerList, category, ikonka) {

	// w zaleznosci od typu ustalamy rodzaj ikonki
	switch(ikonka){
		case 'icon_blue': var icon = icon_blue; break;
		case 'icon_brown': var icon = icon_brown; break;
		case 'icon_purple': var icon = icon_purple; break;
		case 'icon_yellow': var icon = icon_yellow; break;
		case 'icon_white': var icon = icon_white; break;
		case 'icon_green': var icon = icon_green; break;
		case 'icon_normal': var icon = icon_normal; break;
		default: var icon = icon_blue;
	}	
	
	// tworzymy marker
	var marker = new GMarker(point, icon);
	marker.tooltip = '<div class="markerTooltip">'+label+'<\/div>';
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(infoWindow);
	});

	gmarkers[i] = marker;
	gmarkers[i].mycategory = category; 
	gmarkers[i].offerList = offerList; 
	OfferList += offerList;
	i++;
  
	// dodajemy obsługę akcji mouseover
	GEvent.addListener(marker,"mouseover", function() {
		//marker.setHoverImage(_base+"marker_icon/marker_20_pointer_3.gif");
		//marker.topMarkerZIndex();
		showTooltip(marker);
	});        
	
	// dodajemy obsługę akcji mouseout
	GEvent.addListener(marker,"mouseout", function() {
		//marker.restoreImage();
		//marker.restoreMarkerZIndex();
		tooltip.style.visibility="hidden"
	});   
  
	return marker;
}

/* funkcja otwiera infoWindow na mapie */

function openMapInfoWindow(i) {
	GEvent.trigger(gmarkers[i], "click");
}

/* funkcja zamyka infoWindow na mapie */

function closeMapInfoWindow(){
	map.getInfoWindow().hide();
}

/* Funkcja tworzy i obsługuje wyliczenie położenia tooltip na mapie */

function showTooltip(marker) {
    tooltip.innerHTML = marker.tooltip;
	var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
	var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor=marker.getIcon().iconAnchor;
	var width=marker.getIcon().iconSize.width;
	var height=tooltip.clientHeight;
	var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y -height)); 
	pos.apply(tooltip);
	tooltip.style.visibility="visible";
}

/* funkcja zamyka wszelkie otwarte wpisy na liście ofert */

function closeAllEntries(){

	for(var i = 0; i<divTab.length; i++){
		
		if( document.getElementById('close_'+divTab[i]) ){
			ukryj('close_'+divTab[i]);
		}
		
		if( document.getElementById('contentDIV_'+divTab[i]) ){
			ukryj('contentDIV_'+divTab[i]); 
		}
		
		if( document.getElementById('open_'+divTab[i]) ){
			pokaz('open_'+divTab[i]);		
		}
		
		closeMapInfoWindow();
	}
}

/*
Funkcja ukrywa / pokazuje wpisy zgodne z zakliknietymi grupami 
*/

function RemakeSidebar() {
	OfferList = "";

	for (var i=0; i<gmarkers.length; i++) {
    	if (!gmarkers[i].isHidden()) {
			OfferList += gmarkers[i].offerList;
		}
	}

	document.getElementById("OfferListKontener").innerHTML = OfferList;
}

/*
funkcja obsluguje kliknięcie w checkbox grupy ofert

box - kliknięty obiekt (chceckbox)
category - grupa wpisow i markerow 
*/

function boxclick(box, category) {

	if (box.checked) {
		show(category);
	} else {
    	hide(category);
	}
	
	RemakeSidebar();
}

/*
Funkcja pokazuje wybraną grupę wpisów i markerów

category - grupa wpisow i markerow 
*/

function show(category) {
	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].mycategory == category) {
			gmarkers[i].show();
		}
	}

	document.getElementById("MarkerGroup_"+category).checked = true;
}

/*
Funkcja ukrywa wybraną grupę wpisów i markerów

category - grupa wpisow i markerow 
*/

function hide(category) {

	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].mycategory == category) {
			gmarkers[i].hide();
		}
	}

	document.getElementById("MarkerGroup_"+category).checked = false;
	map.closeInfoWindow();
}

/*
Funkcja ładuje opis pelnej ofery do dynamicznego okna
- div - id DIV do któreg ma zostać zaladowana zawartosc
- typ - (e|f) - rodzaj ladowanego contentu
- id - ID obiektu do zaladowania
*/

function loadFullOfferContent(div, typ, id, el){
	
	switch(typ){
		case 'e': 
			var path = 'includes/lib/wydarzenia/offer.php';	
			break;	
			
		case 'f': 
			var path = 'includes/lib/katalog_firm/obiekt_view/offer.php';	
			break;				
		
		default: 
			return false;
	}

	closeAllEntries();
	ukryj('open_'+id);
	pokaz('close_'+id);
	pokaz('contentDIV_'+id); 
	
	openMapInfoWindow(el);
	
	var config = {evalScripts : true }	
	
	var req = mint.Request();
	req.AddParam("typ", typ);
	req.AddParam("id", id);
	
	req.Set(config).Send(path, div);

	changeOpac(0, div);
	Fade(div, 100, 20, 1200);
	loading(div);

	
}

/* funkcja pokazuje / ukrywa legendę do mapy */

function MapKeySlider(akcja) {
	
	if(akcja == 'out'){
		ukryj('keyContener');
		ukryj('sliderOpen');
		pokaz('sliderClose');
	    mint.fx.Size("map_key", 13, 450, 20, 200);
	}
	
	if(akcja == 'in'){
		pokaz('sliderOpen');
		ukryj('sliderClose');
	    mint.fx.Size("map_key", 170, 450, 20, 200);
		setTimeout(function() { pokaz('keyContener'); },500);
	}	
}

/* funkcja wysyla formularz wyszukiwania ofert */

function searchOffer(){

	var req = mint.Request();
               
    req.OnSuccess = function() {
		//alert(this.responseText);
		//parseXMLdataForMarkers( _path+"includes/lib/oferty/xml_output.php?"+this.responseText );
		ukryj('startDiv');
		changeOfferView('', '', this.responseText);
    }
             
    req.OnError = function (){
		//alert('error');
    }			 

	req.SendForm("SearchOfferForm",_path+"includes/lib/oferty/xml_output.php");

}

 







