// config
var minMapZoom = 5;
var maxMapZoom = 17;
var baseUrl = 'http://www.mapy.olpp.pl/';

// zmienne holdMapPosition
var startMapCenterV;
var previousMapCenterV;

// map
var map;
var icons = new Array();
var iconActive;
var markers = new Array();
var markerActive;
var basePoints;
var polyRailWays;
var polyPipelines = new Array();
var mapZoomRange = maxMapZoom - minMapZoom;

function mapLoad() {
	if(GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById('map'));
		map.addMapType(G_PHYSICAL_MAP);
		map.addControl(dragzoom = new DragZoomControl({opacity:0.33, fillColor:"#1e40ae", border:"2px solid #1e40ae"}, {buttonStyle:{display:"none"}, overlayRemoveTime:0}, {dragend:function(){holdMapPosition('fromStart');}}));
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		map.setCenter(new GLatLng(51.919438,19.145136),6);
		map.savePosition();
		geocoder = new GClientGeocoder();
		gdir = new GDirections(map);
		
		holdMapPosition();
		setZoomRange();
		setZoomSliderPosition();
		setMapTypes();
		
		prepareIcons();
		setupBaseFilter();
		setupLocationLink();
		setupObjSelect();
		setupSearch();
		loadPointSet('baseOlpp');
		
		GEvent.addListener(map, 'tilesloaded', function(){preparePrint()});
		GEvent.addListener(map, 'moveend', function(){preparePrint()});
		GEvent.addListener(map, 'zoomend', function(){setZoomSliderPosition()});
	}
}

function setZoomRange() {
	var mapTypes = map.getMapTypes();
	for(i in mapTypes) {
		mapTypes[i].getMinimumResolution = function(){return minMapZoom;}
		mapTypes[i].getMaximumResolution = function(){return maxMapZoom;}
	}
}

function setZoomSliderPosition() {
	sliderPos = 100 - (((map.getZoom() - minMapZoom) / mapZoomRange) * 100);
	$("#mapZoom .zoomScroller").css("backgroundPosition", sliderPos + "% 0");
}

function setMapTypes() {
	var mapTypes = map.getMapTypes();
	currentMapTypeNum = $.inArray(map.getCurrentMapType(), mapTypes);
	
	$("#mapTypes li:eq("+ currentMapTypeNum +")").addClass("active");
	
	$("#mapTypes li").each(function(i) {
		$(this).click(function(){
			$("#mapTypes li").removeClass("active");
			$(this).addClass("active");
			map.setMapType(mapTypes[i]);
		});
	});
}

function prepareIcons() {
	var iconData = {
		"baseOlpp":		"bazy_olpp.png",
		"basePern":		"bazy_pern.png",
		"baseOther":	"inne_bazy.png",
		"airport":		"lotniska.png",
		"olpp":			"olpp.png",
		"port":			"porty.png",
		"crossRoad":	"przejscia_drogowe.png",
		"crossRail":	"przejscia_kolejowe.png",
		"rafinery":		"rafinerie.png",
		"company":		"spolki.png"
	}
	
	for(i in iconData) {
		icons[i] = new GIcon(G_DEFAULT_ICON);
		icons[i].image = "images/icons/" + iconData[i];
		icons[i].shadow = null;
		icons[i].printImage = "images/icons/" + iconData[i].replace(/(.*)\.png$/, "$1.gif");
		icons[i].printShadow = null;
		icons[i].iconSize = new GSize(55, 42);
		icons[i].iconAnchor = new GPoint(21, 42);
		icons[i].infoWindowAnchor = new GPoint(21, 0);
		icons[i].imageMap = [14,0, 8,3, 3,8, 1,12, 0,15, 0,23, 1,26, 3,30, 8,35, 10,36, 12,37, 14,38, 17,39, 20,42, 22,42, 25,39, 28,38, 34,35, 39,30, 41,26, 42,23, 42,15, 41,12, 39,8, 34,3, 28,0];
	}
	
	iconActive = new GIcon(G_DEFAULT_ICON);
	iconActive.image = "images/icons/active.png";
	iconActive.shadow = null;
	iconActive.printImage = "images/icons/active.gif";
	iconActive.printShadow = null;
	iconActive.iconSize = new GSize(31, 22);
	iconActive.iconAnchor = new GPoint(15, 11);
	iconActive.infoWindowAnchor = new GPoint(15, 0);
	iconActive.imageMap = [8,1, 1,6, 8,11, 1,17, 6,21, 9,21, 14,17, 16,17, 22,21, 25,21, 30,17, 23,11, 30,6, 24,1, 16,6, 8,1];
}

function loadPointSet(pointSetName) {
	if(markers[pointSetName]) {
		return false;
	}
	else {
		markers[pointSetName] = new Array();
	}
	
	points = mapObjects[pointSetName];
	
	if(pointSetName == 'baseOlpp') {
		objBaseListElm = $("#objBaseList li");
		basePoints = new Array();
		
		for(i in points) {
			if($(objBaseListElm[i]).hasClass("enabled") && $(objBaseListElm[i]).find("span").hasClass("checkbox-checked")) {
				basePoints.push(points[i]);
			}
		}
		
		points = basePoints;
	}
	
	for(i in points) {
		markers[pointSetName][i] = (new GMarker(new GLatLng(points[i].lat, points[i].lng), {title:points[i].name, icon:icons[pointSetName]}));
		
		if(markerActive && (markerActive.getLatLng().lat() == markers[pointSetName][i].getLatLng().lat()) && (markerActive.getLatLng().lng() == markers[pointSetName][i].getLatLng().lng())) {
			markerActive.show();
		}
		
		map.addOverlay(markers[pointSetName][i]);
		
		GEvent.addListener(markers[pointSetName][i], "click", function(){showPointInfo(this);});
	}
	
	if(pointSetName != 'baseOlpp') {
		$("#objSelect span.icon-"+pointSetName).parent("a").attr("class", "active");
	}
}

function unloadPointSet(pointSetName) {
	markersToRemove = markers[pointSetName];
	
	for(i in markersToRemove) {
		if(markerActive && (markerActive.getLatLng().lat() == markersToRemove[i].getLatLng().lat()) && (markerActive.getLatLng().lng() == markersToRemove[i].getLatLng().lng())) {
			markerActive.hide();
		}
		
		map.removeOverlay(markers[pointSetName][i]);
	}
	delete markers[pointSetName];
	
	$("#objSelect span.icon-"+pointSetName).parent("a").attr("class", "inactive");
}

function setupLocationLink() {
	// pattern: ?lat=53.152&lng=18.543&z=12&o=baseOlpp+baseOther+airport
	
	if(document.URL.search(/\?{1}/) != -1) {
		urlEnd = document.URL.split('?')[1];
		urlEnd = urlEnd.split('#')[0];
		urlParts = urlEnd.split('&');
		
		if(urlEnd) {
			urlParams = new Array();
			for(i in urlParts) {
				part = urlParts[i].split('=');
				urlParams[part[0]] = part[1];
			}
			
			if(urlParams['lat'] && urlParams['lng'] && urlParams['z']){
				map.setCenter(new GLatLng(urlParams['lat'], urlParams['lng']), parseFloat(urlParams['z']));
				
				if(urlParams['o']) {
					mapObjToLoad = urlParams['o'].split('+');
					for(i in mapObjToLoad) {
						if(mapObjToLoad[i] == 'railWays') {
							loadRailWays();
						}
						else if(mapObjToLoad[i] == 'rawMaterial' || mapObjToLoad[i] == 'product') {
							loadPipelines(mapObjToLoad[i]);
						}
						else {
							loadPointSet(mapObjToLoad[i]);
						}
					}
				}
				if(urlParams['mt']) {
					$("#mapTypes li:eq("+ urlParams['mt'] +")").trigger("click");
				}
			}
		}
	}
	
	if($.browser.msie) {
		$("#getLinkCopy").empty().append('<a href="#">kopiuj link</a>');
	}
	
	$("#locationLink").click(function(){
		if($("#getLink").hasClass('hidden')) {
			closeBoxes();
			
			mapLink = baseUrl;
			mapLink += '?lat='+ map.getCenter().lat();
			mapLink += '&lng='+ map.getCenter().lng();
			mapLink += '&z='+ map.getZoom();
			mapLink += '&mt='+ $("#mapTypes li").index($("#mapTypes li.active"));
			
			var mapLinkObjects = new Array();
			for(i in markers) {
				if(markers[i]) mapLinkObjects.push(i);
			}
			for(i in polyPipelines) {
				if(polyPipelines[i]) mapLinkObjects.push(i);
			}
			if(polyRailWays) {
				mapLinkObjects.push('railWays');
			}
			
			if(mapLinkObjects.length > 0) {
				mapLink += '&o='+ mapLinkObjects.join('+');
			}
			
			$("#getLinkInput").val(mapLink);
			$("#getLinkInput").focus(function(){
				this.select();
			});
			
			$(".topLayer").addClass('hidden');
			$("#getLink").removeClass('hidden');
			$("#mapDisable").remove();
			$("#mapOuter").append('<div id="mapDisable"></div>');
			$("#bgLayer").show();
			
			$("#getLinkInput").focus().select();
		}
		else {
			$("#getLink").addClass('hidden');
			$("#mapDisable").remove();
			$("#bgLayer").hide();
		}
		return false;
	});
	
	$("#getLinkClose").click(function(){
		$("#getLink").addClass('hidden');
		$("#mapDisable").remove();
		$("#bgLayer").hide();
	});
	
	$("#getLinkCopy a").click(function(){
		textToCopy = document.getElementById("getLinkInput").value;
		window.clipboardData.setData("Text", textToCopy);
		return false;
	});
}

function setupBaseFilter() {
	var bases = mapObjects['baseOlpp'];
	
	$("#baseWholeShow a.all").click(function() {
		$("#baseWholeSelect .none a").trigger("click");
		$("#objBaseList li").addClass("enabled");
		$("#objBaseList .checkbox").removeClass().addClass("checkbox-checked");
		unloadPointSet('baseOlpp');
		loadPointSet('baseOlpp');
		setupBaseLinks();
		return false;
	});
	
	$("#baseWholeShow a.none").click(function() {
		$("#baseWholeSelect .none a").trigger("click");
		$("#objBaseList .checkbox-checked").removeClass().addClass("checkbox");
		unloadPointSet('baseOlpp');
		setupBaseLinks();
		return false;
	});
	
	$("#baseWholeSelect .all a").click(function() {
		$("#objBaseSelect a").addClass("checked");
		verifyServCheckbox();
		filterBases();
		setupBaseLinks();
		return false;
	});
	
	$("#baseWholeSelect .none a").click(function() {
		$("#objBaseSelect a").removeClass("checked");
		verifyServCheckbox();
		filterBases();
		setupBaseLinks();
		return false;
	});
	
	$("#objBaseSelect a").click(function() {
		checkFilter($(this));
		verifyServCheckbox();
		filterBases();
		setupBaseLinks();
		return false;
	});
	
	var basesHTML = '';
	var basesNum = bases.length;
	var basesInFirstCol = Math.ceil(basesNum/4);
	var baseCounter = 0;
	
	for(i=0; i<4; i++) {
		rest = basesNum - basesInFirstCol*i;
		if(rest < basesInFirstCol) {basesInCol = basesNum - basesInFirstCol*3;}
		else {basesInCol = basesInFirstCol;}
		
		basesHTML += '<ul>';
		for(j=0; j<basesInCol; j++) {
			basesHTML += '<li class="enabled"><span class="checkbox-checked"></span> <a href="#">BP nr '+ bases[baseCounter].id +' '+ bases[baseCounter].name +'</a></li>';
			baseCounter++;
		}
		basesHTML += '</ul>';
	}
	
	$("#objBaseList").append(basesHTML);
	
	setupBaseLinks();
	verifyServCheckbox();
}

function checkFilter(obj) {
	if(obj.hasClass("checked")) {
		obj.removeClass("checked");
	}
	else {
		obj.addClass("checked");
	}
}

function checkBase(obj) {
	if(obj.hasClass("checkbox-checked")) {
		obj.removeClass().addClass("checkbox");
	}
	else {
		obj.removeClass().addClass("checkbox-checked");
	}
}

function verifyServCheckbox() {
	checkedCount = $("#objBaseSelect a.checked").size();
	wholeCount = $("#objBaseSelect a").size();
	
	$("#baseWholeSelect a").removeClass("checked");
	
	if(checkedCount == wholeCount) {
		$("#baseWholeSelect .all a").addClass("checked");
	}
	else if(checkedCount == 0) {
		$("#baseWholeSelect .none a").addClass("checked");
	}
}

function setupBaseLinks() {
	$("#objBaseList a").unbind("click").click(function(){
		return false;
	});
	
	$("#objBaseList span").unbind("click");
	$("#objBaseList li.enabled span").click(function() {
		checkBase($(this));
		unloadPointSet('baseOlpp');
		loadPointSet('baseOlpp');
		setupBaseLinks();
	});
	
	$("#objBaseList li.enabled span.checkbox-checked + a").each(function(i){
		$(this).click(function(){
			GEvent.trigger(markers['baseOlpp'][i], "click"); return false;
		});
	});
	
	$("#objBaseList li.enabled span.checkbox + a").each(function(i){
		$(this).click(function(){
			$(this).prev("span").click();
			$(this).click();
		});
	});
}

function setupObjSelect() {
	$("#objSelect a").click(function(){
		className = $(this).find("span:eq(0)").attr("class");
		pointSetName = className.split("-")[1];
		
		if(pointSetName == 'railWays') {
			if(!polyRailWays) {
				loadRailWays();
			}
			else if(polyRailWays) {
				unloadRailWays();
			}
		}
		if(pointSetName == 'rawMaterial' || pointSetName == 'product') {
			if(!polyPipelines[pointSetName]) {
				loadPipelines(pointSetName);
			}
			else if(polyPipelines[pointSetName]) {
				unloadPipelines(pointSetName);
			}
		}
		else {
			if(!markers[pointSetName] && mapObjects[pointSetName]) {
				loadPointSet(pointSetName);
			}
			else if(markers[pointSetName]) {
				unloadPointSet(pointSetName);
			}
		}
		
		return false;
	});
	
	$("#objWholeSelect .all").click(function() {
		for(i in mapObjects) {
			if(i == 'baseOlpp') {
				continue;
			}
			else {
				if (!markers[i]) {
					loadPointSet(i);
				}
			}
		}
		for(i in mapPipelines) {
			loadPipelines(i);
		}
		loadRailWays();
		return false;
	});
	
	$("#objWholeSelect .none").click(function() {
		for(i in mapObjects) {
			if(i == 'baseOlpp') {
				continue;
			}
			else {
				unloadPointSet(i);
			}
		}
		for(i in mapPipelines) {
			unloadPipelines(i);
		}
		unloadRailWays();
		return false;
	});
}

function showPoint(x, y, sType) {
	if(sType != 'maps') {
		if(!markers[sType]) {
			loadPointSet(sType);
		}
	}
	map.setCenter(new GLatLng(x, y), 12);
	$('#extraRes').hide();
}

function setupSearch() {
	$("#search").submit(function(){
		address = $("#search #query").val();
		
		$.ajax({
			type: "POST",
			url: "ajax.php",
			data: "searchObjects=1&searchBases=1&keyword=" + address,
			dataType:'json',
			beforeSend: function() {
				$("#searchLoading").show();
			},
			success: function(msg) {
				geocoder.getLocations(address, function(response){
					if((!response || response.Status.code != 200 || response.Placemark.length == 0) && msg.rows == 0) {
						$('#extraRes').hide ();
						alert('Nie znaleziono wyników spełniających kryteria');
					}
					else {
						if (response.Placemark.length == 1 && msg.rows == 0){
							$('#extraRes').hide();
							var pm = response.Placemark[0];
							var coor = pm.Point.coordinates;
							map.setCenter(new GLatLng(coor[1], coor[0]), 12);
						}
						else {
							if (response.Placemark.length == 0 && msg.rows == 1) {
								showPoint(msg[0].lat, msg[i].lng, msg[i].type);
							}
							else {
								var resultHtml = '<ul>';
								if (msg.rows > 0) {
									if (response.Placemark.length > 0)
									resultHtml += '<li>Znalezione obiekty:<ul>';
									
									for (var i = 0; i < msg.rows; i++) {
										var address = msg[i].name;
										var escapedAddress = address.replace('<', '&lt;').replace('>', '&gt;')
										resultHtml += '<li><a onclick="showPoint(' + msg[i].lat + ',' + msg[i].lng + ', \'' + msg[i].type + '\'); return false;" href="#">' + escapedAddress + '</a></li>';
									}
									
									if (response.Placemark.length > 0)
									resultHtml += '</ul></li>';
								}
								
								if (response.Placemark.length > 0) {
									if (msg.rows > 0)
									resultHtml += '<li>Znalezione miejscowości:<ul>';
									
									for (var i = 0; i < response.Placemark.length; i++) {
										var pm = response.Placemark[i];
										//resultHtml += getGeocodeDropDownListHTML(pm, mapsApiZoomForAccuracy);
										var p = pm.Point;
										var address = pm.address;
										var escapedAddress = address.replace('<', '&lt;').replace('>', '&gt;')
										var acc = pm.AddressDetails ? pm.AddressDetails.Accuracy : 8;
										var mapsApiZoom = 12;
										var panoramioZoom = 17 - mapsApiZoom;
										resultHtml += '<li><a onclick="showPoint(' + p.coordinates[1] + ',' + p.coordinates[0] + ', \'maps\'); return false;" href="#">' + escapedAddress + '</a></li>';
									}
									
									if (msg.rows > 0)
									resultHtml += '</ul></li>';
								}
								
								resultHtml += '</ul>';
								$('#extraRes').html(resultHtml);
								$('#extraRes').show();
								$("#searchLoading").hide();
							}
						}
					}
				});
			}
		});
		
		/*
		geocoder.getLatLng(address, function(point){
		if(!point) {
		alert('Nie znaleziono wyników spełniających kryteria');
		}
		else {
		map.setCenter(point, 12);
		}
		});
		*/
		return false;
	});
}

function filterBases() {
	points = mapObjects['baseOlpp'];
	baseListElms = $("#objBaseList li");
	baseFilter = new Array();
	
	$("#objBaseSelect a.checked").each(function(){
		baseFilter.push($(this).attr("class").split(' ')[0]);
	});
	
	$("#objBaseList li").removeClass();
	
	for(i in points) {
		counter = 0;
		
		for(j in baseFilter) {
			if(points[i].services[baseFilter[j]]) {
				counter++;
			}
		}
		if(counter == baseFilter.length) {
			$(baseListElms[i]).addClass("enabled");
		}
	}
	
	unloadPointSet('baseOlpp');
	loadPointSet('baseOlpp');
}

function showPointInfo(marker) {
	closePointInfo('all');
	
	markActiveMarker(marker);
	
	var markerContainer;
	var markerContainerName;
	var markerNum;
	
	for(i in markers) {
		markerNum = $.inArray(marker, markers[i]);
		if(markerNum != -1) {
			markerContainerName = i;
			markerContainer = markers[i];
			break;
		}
	}
	
	var isBaseOlpp = markerContainerName == 'baseOlpp';
	
	var point = isBaseOlpp ? basePoints[markerNum] : mapObjects[markerContainerName][markerNum];
	
	nextPoint = markerContainer[markerNum+1] ? markerNum+1 : 0;
	prevPoint = markerContainer[markerNum-1] ? markerNum-1 : markerContainer.length-1;
	
	
	var boxTitle;
	var boxNext;
	var boxPrev;
	var txtPointId = txtAddress = txtEmail = txtMapa = txtDesc = txtServices = '';
	
	switch(markerContainerName) {
		case 'baseOlpp':
			boxTitle = 'Baza paliw OLPP';
			boxNext = 'następna';
			boxPrev = 'poprzednia';
			txtPointId = 'Baza Paliw nr '+ point.id +'<br />';
			
			if(point.services["magazynowanie"]) {txtServices +='<li>Magazynowanie paliw</li>';}
			if(point.services["przesyl"]) {txtServices +='<li>Przesył paliw</li>';}
			if(point.services["przeladunek"]) {txtServices +='<li>Przeładunek paliw</li>';}
			if(point.services["biokomponenty"]) {txtServices +='<li>Dozowanie biokomponentów</li>';}
			if(point.services["uszlachetnianie"]) {txtServices +='<li>Uszlachetnianie paliw</li>';}
			if(point.services["badanie"]) {txtServices +='<li>Badanie jakości paliw</li>';}
			if(point.services["sklady"]) {txtServices +='<li>Składy podatkowe</li>';}
			if(point.services["przejscia"]) {txtServices +='<li>Przejścia graniczne (torowe)</li>';}
			break;
		
		case 'basePern':
			boxTitle = 'Baza magazynowa PERN';
			boxNext = 'następna';
			boxPrev = 'poprzednia';
			break;
		
		case 'baseOther':
			boxTitle = 'Inna baza paliw';
			boxNext = 'następna';
			boxPrev = 'poprzednia';
			break;
		
		case 'airport':
			boxTitle = 'Port lotniczy';
			boxNext = 'następny';
			boxPrev = 'poprzedni';
			break;
		
		case 'olpp':
			boxTitle = 'OLPP';
			boxNext = 'następny';
			boxPrev = 'poprzedni';
			break;
		
		case 'port':
			boxTitle = 'Port morski';
			boxNext = 'następny';
			boxPrev = 'poprzedni';
			break;
		
		case 'crossRoad':
			boxTitle = 'Drogowe przejście graniczne';
			boxNext = 'następne';
			boxPrev = 'poprzednie';
			break;
		
		case 'crossRail':
			boxTitle = 'Kolejowe przejście graniczne';
			boxNext = 'następne';
			boxPrev = 'poprzednie';
			break;
		
		case 'rafinery':
			boxTitle = 'Rafineria';
			boxNext = 'następna';
			boxPrev = 'poprzednia';
			break;
		
		case 'company':
			boxTitle = 'Grupa kapitałowa';
			boxNext = 'następna';
			boxPrev = 'poprzednia';
			break;
	}
	
	if(point.street) {txtAddress += point.street;}
	if(point.street && (point.postal || point.city)) {txtAddress += ',<br />';}
	if(point.postal) {txtAddress += point.postal;}
	if(point.city) {txtAddress += ' '+ point.city;}
	if(point.phones) {txtAddress += '<br />'+ point.phones;}
	
	if(point.description) {txtDesc += point.description;}
	
	if(point.email) {txtEmail = '<a href="mailto:'+ point.email +'"><span>e-mail</span></a> ';}
	if(isBaseOlpp && (point.id != '16' && point.id != '18')) {txtMapa = '<a href="images/maps/baza_'+ point.id +'.gif" class="lightbox"><span>mapa dojazdu</span></a> ';}
	
	$("#mapObjects").prepend(''+
		'<div class="objBox" id="objInfo">'+
			'<div class="objBoxTop"></div>'+
			'<div class="objBoxMiddle">'+
				'<div class="objBoxInner">'+
					'<div class="objBoxHeader">'+
						'<h3>'+ boxTitle +'</h3>'+
						'<ul class="selectList">'+
							'<li class="first"><a href="#" onclick="pointInfoNav(\'prev\', \''+ markerContainerName +'\', '+ markerNum +'); return false;">'+ boxPrev +'</a></li>'+
							'<li class="last"><a href="#" onclick="pointInfoNav(\'next\', \''+ markerContainerName +'\', '+ markerNum +'); return false;">'+ boxNext +'</a></li>'+
						'</ul>'+
						'<div class="cornerButton close">'+
							'<a href="#" onclick="closePointInfo(this); return false;">zamknij</a>'+
						'</div>'+
					'</div>'+
					'<div class="objBoxContent">'+
						'<div class="objBoxContWhite">'+
							'<div class="objBoxContWhiteInner">'+
								'<div class="pointInfo">'+
									'<div class="basic">'+
										'<div class="name">'+
											txtPointId +
											'<big><strong>'+ point.name +'</strong></big>'+
										'</div>'+
										'<address>'+
											txtAddress +
										'</address>'+
										'<div class="buttons">'+
											txtEmail +
											txtMapa +
											'<a href="#" onclick="$(\'#showTrack\').show(); $(\'#inputShowRoad\').focus(); return false;"><span>trasa</span></a>'+
										'</div>'+
										'<form onsubmit="showRoad(\'' + point.lat + '\', \'' + point.lng + '\', this); return false;" id="showTrack"><fieldset><div id="showTrackInputO1"><div id="showTrackInputO2"><input id="inputShowRoad" name="inputShowRoad" type="text" /></div></div><input type="image" class="submit" src="images/track_submit.png" value="wyznacz" /></fieldset></form>'+
									'</div>'+
									'<div class="description">'+
										'<h3>Opis</h3>'+
										'<p>'+ txtDesc +'</p>'+
									'</div>'+
									'<div class="services">'+
										'<h3>Zakres usług</h3>'+
										'<ul>'+
											txtServices +
										'</ul>'+
									'</div>'+
									'<div class="photo">'+
										'<img src="images/photos/base_default.jpg" alt="" />'+
									'</div>'+
								'</div>'+
							'</div>'+
						'</div>'+
					'</div>'+
				'</div>'+
				'<div class="clear"></div>'+
			'</div>'+
			'<div class="objBoxBottom"></div>'+
		'</div>'
	);
	
	if(isBaseOlpp) {$('a.lightbox').lightBox();}
	
	map.setCenter(new GLatLng(point.lat, point.lng), 13);
	holdMapPosition('fromStart');
}

function showRoad(lat, lng, cWindow) {
	geocoder.getLocations(new GLatLng(lat, lng), function(answer) {
		getPoint(answer);
	});
	return true;
}

function getPoint(answer) {
	destination = $('#inputShowRoad').val();
	
	geocoder.getLocations(destination, function(response) {
		if(!response || response.Status.code != 200 || response.Placemark.length == 0) {
			alert('Nie znaleziono wyników spełniających kryteria');
			return false;
		}
		else {
			if(response.Placemark.length == 1) {
				gdir.clear();
				gdir.load("from: "+ answer.Placemark[0].address +" to: "+ destination, {"locale":"pl"});
			}
		}
	});
	$('#showTrack').hide();
}

function closePointInfo(object) {
	if(object == 'all') {
		object = $(".pointInfo");
	}
	
	if($.browser.version == "6.0") {
		$(".objBox").css("position", "static");
		$(object).parents(".objBox").remove();
		$(".objBox").css("position", "relative");
	}
	else {
		$(object).parents(".objBox").remove();
	}
	
	holdMapPosition();
}

function loadRailWays() {
	if(polyRailWays) {
		return false;
	}
	
	polyRailWays = new Array();
	
	for(i in mapRailWays) {
		polyRailWays[i] = new Array();
		
		for(j in mapRailWays[i]) {
			var polylineArr = new Array();
			for(k in mapRailWays[i][j]) {
				polylineArr.push(new GLatLng(mapRailWays[i][j][k].lat, mapRailWays[i][j][k].lng));
			}
			
			if(i == 'doubleTrack') {
				polyRailWays[i][j] = new GPolyline(polylineArr, "#686868", 2, 1);
			}
			else if(i == 'singleTrack') {
				polyRailWays[i][j] = new GPolyline(polylineArr, "#686868", 1, 1);
			}
			map.addOverlay(polyRailWays[i][j]);
		}
	}
	
	$("#objSelect span.icon-railWays").parent("a").attr("class", "active");
}

function unloadRailWays() {
	for(i in polyRailWays) {
		for(j in polyRailWays[i]) {
			map.removeOverlay(polyRailWays[i][j]);
		}
	}
	polyRailWays = null;
	
	$("#objSelect span.icon-railWays").parent("a").attr("class", "inactive");
}

function loadPipelines(type) {
	if(polyPipelines[type]) {
		return false;
	}
	
	polyPipelines[type] = new Array();
	
	if(type == 'rawMaterial') {
		config = {color:"#679f28", weight:4}
	}
	else if(type == 'product') {
		config = {color:"#2141aa", weight:3}
	}
	
	for(i in mapPipelines[type]) {
		polyPipelines[type][i] = new GPolyline.fromEncoded({
			color: mapPipelines[type][i].color ? mapPipelines[type][i].color : config.color,
			weight: config.weight,
			opacity: 1,
			points: mapPipelines[type][i].points,
			levels: mapPipelines[type][i].levels,
			zoomFactor: 2, 
			numLevels: 18
		});
		map.addOverlay(polyPipelines[type][i]);
	}
	
	$("#objSelect span.icon-"+type).parent("a").attr("class", "active");
}

function unloadPipelines(type) {
	pipelinesToRemove = polyPipelines[type];
	
	for(i in pipelinesToRemove) {
		map.removeOverlay(polyPipelines[type][i]);
	}
	delete polyPipelines[type];
	
	$("#objSelect span.icon-"+type).parent("a").attr("class", "inactive");
}

function holdMapPosition(option) {
	currentMapTop = $("#mapControls").position().top + $("#mapControls").height();
	currentMapBottom = $("#mapObjects").position().top;
	currentMapCenterV = (currentMapBottom - currentMapTop) / 2;
	
	if(!startMapCenterV) {startMapCenterV = previousMapCenterV = currentMapCenterV;}
	
	if(option == 'fromStart') {
		panV = currentMapCenterV - startMapCenterV;
	}
	else {
		panV = currentMapCenterV - previousMapCenterV;
	}
	
	map.panBy(new GSize(0, panV));
	previousMapCenterV = currentMapCenterV;
}

// helpers
function pointInfoNav(direction, markersetname, markernum) {
	if(direction == "prev") {
		if(markers[markersetname][markernum-1]) {
			GEvent.trigger(markers[markersetname][markernum-1], 'click');
		}
		else if(markers[markersetname].length > 0) {
			GEvent.trigger(markers[markersetname][0], 'click');
		}
	}
	else if(direction == "next") {
		if(markers[markersetname][markernum+1]) {
			GEvent.trigger(markers[markersetname][markernum+1], 'click');
		}
		else if(markers[markersetname].length > 0) {
			GEvent.trigger(markers[markersetname][0], 'click');
		}
	}
}

function markActiveMarker(marker) {
	clearActiveMarker();
	markerActive = new GMarker(marker.getLatLng(), {icon:iconActive, clickable:false, zIndexProcess:zIndexDown});
	map.addOverlay(markerActive);
}

function clearActiveMarker() {
	if(markerActive) {
		map.removeOverlay(markerActive);
	}
}

function zIndexDown(marker) {
	zIndex = GOverlay.getZIndex(marker.getPoint().lat());
	return zIndex-1;
}

