function CreateMap(p1, p2, p3, geo_id, cat_id, loc_id, drag, get_only_one_cat, address, region_id,cale_panstwo,wylacz_kontrolki)
{
	if(GBrowserIsCompatible() && document.getElementById('map'))
	{
		map = new GMap2(document.getElementById('map'));	
		dojazd = new GDirections(map, document.getElementById("map_directions"));	
		GEvent.addListener(dojazd, "error", function()  
		{  
			if (document.getElementById('map_directions'))
				document.getElementById('map_directions').style.display = 'none';			
			if (!geocode(document.getElementById('address_from').value, dojazd.addressTo))
				document.getElementById('address_from').style.backgroundColor = '#ff0000';
		}); 		
		
		map.setCenter(new GLatLng(p1,p2),p3);			
		
		if (!wylacz_kontrolki) {
			if (!document.getElementById('google_map_control_disabled') || document.getElementById('google_map_control_disabled') && document.getElementById('google_map_control_disabled').value==0)			
				map.addControl(new GLargeMapControl());
			if (document.getElementById('google_small_zoom_enabled') && document.getElementById('google_small_zoom_enabled').value==1)
				map.addControl(new GSmallZoomControl());
			if (!document.getElementById('google_map_type_disabled') || document.getElementById('google_map_type_disabled') && document.getElementById('google_map_type_disabled').value==0)
				map.addControl(new GMapTypeControl());
			if (!document.getElementById('google_scale_control_disabled') || document.getElementById('google_scale_control_disabled') && document.getElementById('google_scale_control_disabled').value==0)
				map.addControl(new GScaleControl());
			if (!document.getElementById('google_overview_map_disabled') ||	document.getElementById('google_overview_map_disabled') && document.getElementById('google_overview_map_disabled').value==0)
				map.addControl(new GOverviewMapControl());
		}
		
		if (document.getElementById('google_map_disable_dragging') && document.getElementById('google_map_disable_dragging').value==1) map.disableDragging();

		obszar = new GLatLngBounds();

		loadMapData(geo_id, cat_id, loc_id, drag, get_only_one_cat, region_id,cale_panstwo);	

		
	
		if (drag)
			fillGForm(map.getCenter(),map.getZoom(),true);
			
		if (address)
		{
			geocode(address);
		}
		
		
	}
}

function CreatePrintMap(p1, p2, p3, geo_id, cat_id, loc_id, drag, get_only_one_cat)
{
	if(GBrowserIsCompatible() && document.getElementById('map'))
	{
		map = new GMap2(document.getElementById('map'));		
		/*
		if (!map)
			var map=new GMap2(document.getElementById('map'));
			
		var mt=map.getMapTypes();
		*/
		map.setCenter(new GLatLng(p1,p2),p3);			

		loadMapData(geo_id, cat_id, loc_id, drag, get_only_one_cat);					
		if (drag)
			fillGForm(map.getCenter(),map.getZoom());		 
	}
}

function loadMapData(geo_id, cat_id, loc_id, drag, get_only_one_cat, region_id,cale_panstwo)
{

		
	var loading = document.getElementById('loading');
	map.clearOverlays();
	if(GBrowserIsCompatible())
	{
		// tu wykomentowujemy wczytywanie konkretnego pliku kategorii; wczytujemy wszystkie ew pokazujemy wybrane
		var xml_url = '/files/ajax/mapy.php?xml=1&' + ((loc_id || drag) ? 'id=' + loc_id : 'geo=' + geo_id) +  '&loc_geo=' + geo_id + '&kat=' + ((get_only_one_cat) ? cat_id : '0') + ((region_id) ? '&region=' + region_id : '') + ((document.getElementById('murl')) ? '&domain=' + document.getElementById('murl').value : '') + ((document.getElementById('map_station') && document.getElementById('map_station').value) ? '&station=1' : '') + ((drag) ? '&drag=1' : '');
		//alert(xml_url);
		if (loading)
     		loading.style.display = 'block';		
		GDownloadUrl(xml_url, function(dane,kodOdpowiedzi)  
		{  
		     if(kodOdpowiedzi==200)  
		     {  
				var xml = GXml.parse(dane);
				
				var pozycja = xml.documentElement.getElementsByTagName('position');
				var markery = xml.documentElement.getElementsByTagName('marker');
				if (markery.length>0) {
					for(var i=0; i<markery.length; i++)
					{
						var lat = parseFloat(markery[i].getAttribute("lat"));
						if (!lat)
							lat = parseFloat(pozycja[0].getAttribute("x"));
						var lon = parseFloat(markery[i].getAttribute("lon"));
						if (!lon)
							lon = parseFloat(pozycja[0].getAttribute("y"));
						var ikona_url = markery[i].getAttribute("ico");
						//alert(ikona_url);
						var foto = markery[i].getAttribute("photo");
						var desc = markery[i].getAttribute("txt");
						var category = markery[i].getAttribute("cat");
						var parent_category = markery[i].getAttribute("parent_cat");
						var name = markery[i].getAttribute("name");
						
						obszar.extend(new GLatLng(lat,lon));
						
						if (markery[i].getAttribute("id_geografii"))
						{
							//var width = (region_id) ? 20 : 9;
							//var height = (region_id) ? 26 : 9;
							if (cale_panstwo) {
								var width = 20;
								var height = 26;
							} else {
								var width = 9;
								var height = 9;	
							}						
							var marker = createCityMarker(new GLatLng(lat,lon),desc,foto,ikona_url,category,parent_category,name,drag, width, height);
						}
						else
							var marker = createLocationMarker(new GLatLng(lat,lon),desc,foto,ikona_url,category,parent_category,drag); 
							
						if (drag)
						{
							GEvent.addListener(marker, "dragstart", function() {marker.closeInfoWindow();});
							GEvent.addListener(marker, "dragend", function() {fillGForm(marker.getPoint(),map.getZoom(),true);});	
						}					
 
						markers.push(marker);
						/*alert(marker.desc);*/
						map.addOverlay(marker);
						
						
						
					}
					
					if ( (!document.getElementById('map_no_center') || !document.getElementById('map_no_center').value ) && markery.length != 1 )
					{
						var nowyZoom = map.getBoundsZoomLevel(obszar);
                                             
						if (nowyZoom>15) nowyZoom=15;
						if (cale_panstwo) nowyZoom++;
						var nowyPunkt = obszar.getCenter();
				
						map.setCenter(nowyPunkt,nowyZoom);
					}	
														
				}
				/*
				mgr = new MarkerManager(map);
				mgr.addMarkers(markers, 11);
				mgr.refresh();	
				*/
				
				if (cat_id && cat_id!=-1)
					showHideCategory(cat_id,true,true);
				if (loading)
     				loading.style.display = 'none';	
		     }  
		     /*
		     else  
		     {  
		         alert('błąd przy wczytywaniu danych xml');  
		     } 
		     */ 
		 }); 					
	}
//alert(obszar);
		
		
		
}

function refreshMap(checkbox,category)
{
	if(checkbox.checked)
		showHideCategory(category,true);
	else
		showHideCategory(category,false);
}


function showHideCategory(category,show,close_rest)
{
			obszar = null;
			obszar = new GLatLngBounds();
			var markers_exist = 0;
	
			for(var i=0; i<markers.length; i++)
			{
				var mark = document.getElementById('kat' + markers[i].category);
				//if (mark)
				{
					if(markers[i].category==category || markers[i].parent_category==category)
					{
						if(show==true)
						{
							markers[i].show();
							if (mark)
								mark.checked = true;
							obszar.extend(new GLatLng(markers[i].getPoint().lat(),markers[i].getPoint().lng()));
							markers_exist = 1; 
						}
						else
						{
							markers[i].hide();
							if (mark)
								mark.checked = false;
						}
					}
					else if (close_rest && show)
					{
						if (markers[i].category != 0)
						{
							markers[i].hide();
							if (mark)
								mark.checked = false;						
						}
					}
				}
			}
			if (markers_exist && !document.getElementById('map_no_center') && markers.length != 1)
				map.setCenter(obszar.getCenter(),map.getBoundsZoomLevel(obszar));
}



function createLocationIcon(img)
{
	var baseIcon = new GIcon();
	baseIcon.image = img;
	baseIcon.iconSize = new GSize(28, 36);
	baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(9, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	return baseIcon;	
}

function createLocationMarker(point, desc, img, ico, cat, parent_cat, drag) 
{
	var cloud_height = (document.getElementById('google_map_cloud_height')) ? document.getElementById('google_map_cloud_height').value : 100;
 	if (ico)
 	{
 		var tip = createLocationIcon(ico);
  		var marker = new GMarker(point, {icon: tip, draggable: drag, clickable: (document.getElementById('google_map_marker_no_info')?false:true)}); 	
 	}
 	else
  		var marker = new GMarker(point, {draggable: drag});
  	
  	marker.category = cat;
  	marker.parent_category = parent_cat;
	marker.txt = "<div style='height: " + cloud_height + "px; width: 200px;'>" + ((img && img.length>0) ? "<img src='" + img + "' border='0' style='float: left; margin: 5px;' />" : "") + desc + '</div>' + ((!document.getElementById('google_drive_from_disabled') || document.getElementById('google_drive_from_disabled') && document.getElementById('google_drive_from_disabled').value==0) ? getDriveToForm(point) : '');
	if (!drag) 	
		GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(marker.txt);});
	return marker;
} 


function createCityIcon(img, width, height)
{
	if (!width)
		var width = 9;
	if (!height)
		var height = 9;
	var baseIcon = new GIcon();
	baseIcon.image = img;
	baseIcon.iconSize = new GSize(width, height);
	baseIcon.iconAnchor = new GPoint(3, 3);
	baseIcon.infoWindowAnchor = new GPoint(6, 2);
	return baseIcon;	
}


function createCityMarker(point, desc, img, ico, cat, parent_cat, name, drag, width, height) 
{
 	if (ico)
 	{
 		var tip = createCityIcon(ico, width, height);
  		var marker = new GMarker(point, {icon: tip, draggable: drag}); 	
 	}
 	else
  		var marker = new GMarker(point, {draggable: drag});
  	marker.category = cat;
  	marker.parent_category = parent_cat;
	marker.txt = desc + getDriveToForm(point, name); 
	marker.name = name;
	if (!drag)  		
		GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(marker.txt);});
	return marker;
} 
      


function openMarkerByName(str)
{
    for(var i=0; i<markers.length; i++)  
    {  
        if(markers[i].name == str)  
        {  
            markers[i].openInfoWindowHtml(markers[i].txt);  
            break;  
        }  
    }  
}





/*					 geocoding dynamiczny - wyszukiwanie ulicy/adresu			*/
function geocode(adres, address_to, div_id)
{
	if (!div_id)
		var div_id = 'map_directions';
	var geo = new GClientGeocoder(); 	
	
	var html='';
	geo.getLocations(adres, function(wyniki)
	{
		if (wyniki.Status.code == G_GEO_SUCCESS)
		{
			if(wyniki.Placemark.length>1)
			{
				html+='<ul>';
				// dla każdego z wyników...
				for (var j=0; j<wyniki.Placemark.length; j++)
				{
					var punkt = wyniki.Placemark[j].Point.coordinates;
					
					// tylko jak mamy nazwe miasta znaleziona
					if (wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea && wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality)
					{
						var geocode_string = wyniki.Placemark[j].AddressDetails.Country.CountryName + ', ' + wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName + ', ' + wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;

						html += '<li>' + ((address_to) ? '<a href="javascript:void(0);" onclick="document.getElementById(\'' + div_id + '\').style.display=\'none\'; drive(\'' + geocode_string + '\', \'' + address_to + '\');">' : '<a href="#" onclick="document.getElementById(\'' + div_id + '\').style.display=\'none\'; map.addOverlay(new GMarker(new GLatLng('+parseFloat(punkt[1])+','+parseFloat(punkt[0])+'))); map.setCenter(new GLatLng('+parseFloat(punkt[1])+','+parseFloat(punkt[0])+'),15);  return false;">');
						if (wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea)  
						{
							html += wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName+', ';
							html += 'pow. '+wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName+', ';  
							html += 'woj. '+wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName + ', '; 					
						}
						html += wyniki.Placemark[j].AddressDetails.Country.CountryName + '</a></li>' ;
					}
				}
				html +='</ul>';
				
				document.getElementById(div_id).innerHTML = html;
				document.getElementById(div_id).style.display = 'block';
			}
			else
			{

                var punkt = wyniki.Placemark[0].Point.coordinates;
                var street_marker = createStreetMarker(new GLatLng(parseFloat(punkt[1]),parseFloat(punkt[0])), adres);
				map.addOverlay(street_marker);
				map.setCenter(new GLatLng(parseFloat(punkt[1]),parseFloat(punkt[0])),15);
			}
			if (document.getElementById('map_address'))
				document.getElementById('map_address').style.backgroundColor = '#ffffff';
			return 1;
		}
		else if (document.getElementById('map_address') && !address_to)
			document.getElementById('map_address').style.backgroundColor = '#ff0000';
		return 0;

	});
}


function createStreetMarker(point, adres) 
{
	var marker = new GMarker(point);
	marker.txt = adres + '' + getDriveToForm(point);
	GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(marker.txt);});
	return marker;
}


function getDriveToForm(point, point_name)
{
	return '<br/><br/><form onsubmit="drive(document.getElementById(\'address_from\').value, \'' + ((point.lat()) ? ((point_name) ? point_name : 'punkt docelowy') + '@' + point.lat() + ',' + point.lng() : point) + '\'); return false;">pokaż dojazd z: <input type=\'text\' name=\'address_from\' id=\'address_from\' value=\'miasto, ulica\' onclick=\'clearField(this);\' style=\'color: #888888; font-size: 11px; height: 15px;\'></form><div id=\'address_from_list\' style=\'display: none;\'></div>';	
}

function setZoom(){
   if (document.getElementById("g_zoom"))
 	document.getElementById("g_zoom").value = map.getZoom();
}

function fillGForm(coords, zoom, enable_submit)
{
	if (document.getElementById("xy"))
		document.getElementById("xy").innerHTML = coords;	
	if (document.getElementById("g_coords"))
 		document.getElementById("g_coords").value = coords;
	if (document.getElementById("g_zoom"))
 		document.getElementById("g_zoom").value = zoom;
 	/* if (enable_submit && document.getElementById("g_submit"))
 		document.getElementById("g_submit").disabled = false; */
}

function clearField (obj)
{
	obj.value=''; 
	obj.style.backgroundColor = '#ffffff';
}





/*		 wskazowki dojazdu OD - DO				*/

function drive(address1, address2)
{
	showHideCategory(0,true,true);
	dojazd.clear();
	if (document.getElementById('address_from'))
	{
		document.getElementById('address_from').style.backgroundColor = '#ffffff';
		document.getElementById('address_from').value = address1;	
	}
	dojazd.addressTo = address2;
	dojazd.load('from:' + address1 + ' to:' + address2);	
	if (document.getElementById('map_directions'))
	{
		document.getElementById('map_directions').innerHTML = '';
		document.getElementById('map_directions').style.display = 'block';
	}
}


