function addPolyline(poly) {
	var pid = poly.getAttribute("pid");
	var nazwa = poly.getAttribute("nazwa");
	var color = poly.getAttribute("color");
	var weight = parseInt(poly.getAttribute("weight"));
	var opacity = parseFloat(poly.getAttribute("opacity"));
	var plevels = poly.getAttribute("levels");
	var numlevels = parseInt(poly.getAttribute("numlevels"));
	var zoomfactor = parseInt(poly.getAttribute("zoomfactor"));
	var encodedpoints = poly.getAttribute("encodedpoints");
	
	var line = GPolyline.fromEncoded({
		color: color,
    	weight: weight,
    	opacity: opacity,
    	points: encodedpoints,
    	levels: plevels,
    	numLevels: numlevels,
    	zoomFactor: zoomfactor
	});
	line.pid = pid;
	return line;
}

function addPolygon(poly) {
	var pid = poly.getAttribute("pid");
	var nazwa = poly.getAttribute("nazwa");
	var color = poly.getAttribute("color");
	var weight = poly.getAttribute("weight");
	var opacity = poly.getAttribute("opacity");
	var fillcolor = poly.getAttribute("fillcolor");
	var fillopacity = poly.getAttribute("fillopacity");
	var plevels = poly.getAttribute("levels");
	var numlevels = parseInt(poly.getAttribute("numlevels"));
	var zoomfactor = parseInt(poly.getAttribute("zoomfactor"));
	var encodedpoints = poly.getAttribute("encodedpoints");
	
	var line = new GPolygon.fromEncoded({
  		polylines: [
    		{points: encodedpoints,
     		levels: plevels,
     		color: color,
     		opacity: opacity,
    		weight: weight,
     		numLevels: numlevels,
     		zoomFactor: zoomfactor}],
  		fill: true,
  		color: fillcolor,
  		opacity: fillopacity,
  		outline: true
	});
	line.lineColor = color;
	line.lineWeight = weight;
	line.lineOpacity = opacity;
	line.fillColor = fillcolor;
	line.fillOpacity = fillopacity;
	line.pid = pid;
	return line;
}

function prepareObject(obiekt_xml) {
	var obiekt = new Object();
		obiekt.oid = obiekt_xml.getAttribute("oid");
		obiekt.lat = parseFloat(obiekt_xml.getAttribute("lat"));
		obiekt.lon = parseFloat(obiekt_xml.getAttribute("lon"));
		obiekt.nazwa = obiekt_xml.getAttribute("nazwa");
		obiekt.ikona = obiekt_xml.getAttribute("ikona");
		obiekt.loaddisp = obiekt_xml.getAttribute("loaddisp");
		obiekt.image = obiekt_xml.getAttribute("image");
		obiekt.cdata = getCDATA(obiekt_xml);
		obiekt.sort = parseInt(obiekt_xml.getAttribute("sort"));
		obiekt.categoryid = obiekt_xml.parentNode.getAttribute('catid');
	return obiekt;
}

function makeMarker(obiekt) {
	var ikona = makeIcon(obiekt);
	var marker	=	new GMarker(new GLatLng(obiekt.lat,obiekt.lon),{title: obiekt.nazwa, icon: ikona});
	var txt = '<div class="markertxt" id="mtxt1">';
	var image = obiekt.image;
	if (image) {
		txt += '<img class="markerimg" src="'+image+'" />';
	}
	txt += '<b>'+obiekt.nazwa+'</b><br>'+obiekt.cdata;
	txt += '<p class="gps"><span class="gpsinfo">Współrzędne GPS:</span><br>'+deg2dms(obiekt.lat,'lat')+'<br>'+deg2dms(obiekt.lon,'lng')+'</p>';
	txt += '<div id="traslink"><a href="javascript:showRouteForm();">Pokaż trasę do tego miejsca</a></div><div id="trasform" style="display: none;">Wpisz adres początkowy i naciśnij OK:<br /><input type="text" size="35" id="addrpocz"><input type="button" value="OK" onclick="findRoute('+"'"+obiekt.nazwa+'@'+obiekt.lat+','+obiekt.lon+"'"+')"><br /><a href="javascript:hideRouteForm()">« Wstecz</a></div>';
	txt += '</div>';
	marker.txt	=	txt;
	GEvent.addListener(marker,"click",function()
	{
			marker.openInfoWindowHtml(marker.txt, {maxWidth:550});
	});
	return marker;
}

function makeIcon(obiekt) {
	var iconx = 16;//parseInt(marker_xml.getAttribute("iconx"));
	var icony = 37;//parseInt(marker_xml.getAttribute("icony"));
	var ikona = new GIcon();
	ikona.image = obiekt.ikona;
	ikona.iconSize = new GSize(32, 37);
	ikona.iconAnchor = new GPoint(iconx, icony);
	ikona.shadow = "";
	ikona.infoWindowAnchor = new GPoint(16, 19);
	return ikona;
}

function getCDATA(element){
	var returnText = "";
	/*var ie = (typeof window.ActiveXObject != 'undefined');
	if(ie){
		if(element.hasChildNodes){
			returnText = element.childNodes[0].nodeValue;
		}
	}else{
		if(element.hasChildNodes){
			returnText = element.childNodes[0].nodeValue;
		}
	}*/
	if(element.hasChildNodes && typeof(element.childNodes[0]) != 'undefined'){
		returnText = element.childNodes[0].nodeValue;
	}
	return returnText;
}

function dms2deg(d,m,s)
{
	// d,m,s - współrzędne, kolejno stopnie, minuty, sekundy
	return d+m/60+s/3600;
}

function deg2dms(liczba,latlng)
{
	if(latlng!='lat' && latlng!='lng') return;
	
	if(liczba>0)
		var znak=0;
	else
		var znak=1;
	
	liczba = Math.abs(liczba);
	
	var d = Math.floor(liczba);
	var s = ((liczba - Math.floor(liczba))*3600);
	var m = Math.floor(s/60);
	
	s = (s - m*60).toFixed(2);
	
	if(s<10)
		s='0'+s;
	if(m<10)
		m='0'+m;
	
	if(latlng=='lat')
		var sufix=['N','S'];
	else
		var sufix=['E','W'];
		
	return sufix[znak]+': '+d+'&ordm;'+m+"'"+s+'"';
}

function tekstBledu(blad)
{
	switch(blad)
	{
		case G_GEO_MISSING_QUERY:
		case G_GEO_MISSING_ADDRESS: var tekst = 'Nie podano adresu!'; break;
		case G_GEO_UNAVAILABLE_ADDRESS:
		case G_GEO_BAD_REQUEST:
		case G_GEO_SERVER_ERROR:
		case G_GEO_UNKNOWN_ADDRESS: var tekst = 'Nie udało się geokodować adresu'; break;
		case G_GEO_TOO_MANY_QUERIES: var tekst = 'Przekroczono limit zapytań do strony Google'; break;
		default: var tekst = 'Nie udało się znaleźć przejazdu pomiędzy podanymi punktami';
	}
	return tekst;
}

function popupicon() {
	var icowindow = window.open("ikona.php", "icowindow","location=1,status=1,scrollbars=1,width=800,height=700,top=50,left=50");
 }
