var mgr;

Event.observe(window, 'load', function() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2(document.getElementById('map'));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		center();
		mgr = new GMarkerManager(map);
		getStations();
	}

	new Form.Element.EventObserver(
		'StationVoivodeshipId',
		function(element, value)
		{
			$('StationCityId').previousSiblings()[0].addClassName('loader');
			new Ajax.Updater(
				'StationCityId',
				root+'/stations/getCities',
				{
					onComplete: stopCitiesLoader,
					asynchronous:true,
					evalScripts:true,
					parameters:Form.Element.serialize('StationVoivodeshipId'),
					requestHeaders:['X-Update', 'StationCityId']
				}
			)
		}
	)

	new Form.Element.EventObserver(
		'StationCityId',
		function(element, value) {
			$('StationVoivodeshipId').previousSiblings()[0].addClassName('loader');
			new Ajax.Request(root+"/fuels/getVoivodeship/"+value, {
				method: 'get',
				onSuccess: function(transport) {
					vid = transport.responseText.split(' ')[0];

					i = 0;
					$('StationVoivodeshipId').childElements().each(function(option) {
						if (option.value == vid) {
							$('StationVoivodeshipId').selectedIndex = i;
						}
						i++;
					});
					stopVoivodeshipsLoader();
				}
			});
			return false;
		}
	);

});

function stopCitiesLoader() {
	$('StationCityId').previousSiblings()[0].removeClassName('loader');
}

function stopVoivodeshipsLoader() {
	$('StationVoivodeshipId').previousSiblings()[0].removeClassName('loader');
}

function getStations() {
	var searchUrl = root+'/stations/getLocation/'+stations;

	GDownloadUrl(searchUrl, function(data) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');

		if (markers.length == 0) {
			return;
		}

		var newmarkers = [];
		for (var i = 0; i < markers.length; i++) {
			var id = markers[i].getAttribute('id');
			var name = markers[i].getAttribute('name');
			var url = markers[i].getAttribute('url');
			var address = markers[i].getAttribute('address');
			var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));

			var fs = markers[i].getElementsByTagName('fuel');
			if (fs.length > 0) {
				var fuels = new Array();
				for (var k = 0; k < fs.length; k++) {
					price = fs[k].getAttribute('price');
					if (price) {
						fuels[k] = fs[k].getAttribute('name')+' - '+fs[k].getAttribute('price')+' zł';
					} else {
						fuels[k] = fs[k].getAttribute('name');
					}
				}
			}
			var marker = createMarker(point, name, url, address, fuels);

			newmarkers.push(marker);
			
		}
		mgr.addMarkers(newmarkers, 1);
		mgr.refresh();
	});
}

function createMarker(point, name, url, address, fuels) {
	var marker = new GMarker(point);
	var html = '<h3><a href="'+root+url+'">' + name + '</a></h3><p><address>' + address + '</address></p><p><strong>Oferuje:</strong></p>';
	if (fuels) {
		html = html+'<ul><li>';
		html = html+fuels.join('</li><li>');
		html = html+'</li></ul>';
		html = html+'<br /><br />';
	}
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function center() {
	if (lat == '0.000000') {
		string = 'Poland, '+search
		geocoder.getLatLng(string, function(latlng) {
			if (!latlng) {
				map.setCenter(new GLatLng(51.919438, 19.145136), 3);
			} else {
				map.setCenter(latlng, zoom);
				locate(range, latlng);
			}
		});
	} else {
		map.setCenter(new GLatLng(lat, lng), zoom);
	}
}

function locate(range, latlng) {
	new Ajax.Request(root+"/"+range+"/locate/"+region_id, {
		method: 'post',
		parameters: {lat: latlng.lat(), lng: latlng.lng()},
	});
}
