var ukr = {
	map: null,
	mapEl: null,
	optionsOpen: false,
	movedWhileOpen: false,

	init: function(mapid, options) {
		ukr.mapEl = $(mapid);
		ukr.options = {
			marker : ukr.markerClick
			};

		Object.extend(ukr.options, options || {});
		
		if (GBrowserIsCompatible()) {
			Element.observe(document, 'unload', function() { GUnload(); });

			ukr.map = new GMap2($(mapid));
			ukr.map.setCenter(new GLatLng(55.83398180, -2.652650), 6);
			ukr.map.addControl(new GLargeMapControl())

			var mapControl = new GHierarchicalMapTypeControl();

			mapControl.clearRelationships();
			mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", false);

			ukr.map.addControl(mapControl);
			ukr.map.enableScrollWheelZoom();
		}
		
		Element.observe(window, 'resize', ukr.resizePage);
		GEvent.addListener(ukr.map, 'moveend', ukr.runRequest);
		GEvent.addListener(ukr.map, 'click', ukr.options.marker);
		ukr.resizePage();
		ukr.runRequest();
	},

	resizePage: function() {
		viewport = document.viewport.getDimensions();
		offsets = ukr.mapEl.cumulativeOffset();
		newHeight = viewport.height - offsets.top - 20;
		var ftr = $('ft');
		if (ftr) {
			newHeight -= ftr.getHeight();
		}
		ukr.mapEl.style.height = newHeight + 'px';
		window.scrollTo(0, 0);
		ukr.map.checkResize();
	},

	gotData: function(originalRequest) {
		var dispStations = eval('(' + originalRequest.responseText + ')');
		ukr.map.clearOverlays();
		var number = 1;
		dispStations.each(function(item) {
			var markerIcon = new GIcon(G_DEFAULT_ICON);
			markerIcon.image = "http://railnet.biz/ukrail/markers/marker" + number++ + ".png";

			var mkr = new GMarker(new GLatLng(item.lat, item.long), { title: item.station, icon:markerIcon });
			GEvent.addListener(mkr, 'infowindowclose', ukr.closeWindow);
			ukr.map.addOverlay(mkr);
		});
	},

	runRequest: function() {
		if (!ukr.optionsOpen) {
			var bnds = ukr.map.getBounds();
			var ne = bnds.getNorthEast();
			var sw = bnds.getSouthWest();
			var url = 'getall.php?nelat=' + ne.lat() + '&nelng=' + ne.lng() + '&swlat=' + sw.lat() + '&swlng=' + sw.lng();
			new Ajax.Request(url, {
				method: 'get',
				onSuccess: ukr.gotData });
		} else {
			ukr.movedWhileOpen = true;
		}
	},

	markerClick: function(marker) {
		if (marker && marker.getTitle) {
			new Ajax.Request('detail.php?id=' + marker.getTitle(), {
				method: 'get',
				onSuccess: function(req) {
					marker.openInfoWindowHtml(req.responseText);
					ukr.optionsOpen = true;
				}
			});
		}
	},

	closeWindow: function() {
		ukr.optionsOpen = false;
		if (ukr.movedWhileOpen) {
			ukr.movedWhileOpen = false;
			ukr.runRequest();
		}
	}
}

Element.observe(document, 'dom:loaded', function(){
	if ($('gmapholder')) {
		ukr.init('gmapholder');
	}
});

