var map;
var c_marker;
var c_markerID = -1;
var urlstr;
markers = [];

var tinyIcon_red = new GIcon();
tinyIcon_red.image = "maps/marker_red.png";
tinyIcon_red.iconSize = new GSize(12, 12);
tinyIcon_red.iconAnchor = new GPoint(6, 6);
tinyIcon_red.infoWindowAnchor = new GPoint(6, 6);
var markerOptions_red = { icon:tinyIcon_red };

var tinyIcon_green = new GIcon(tinyIcon_red, "maps/marker_green.png");
var markerOptions_green = { icon:tinyIcon_green };

var tinyIcon_white = new GIcon(tinyIcon_red, "maps/marker_white.png");

function initialize() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map_canvas"));

		var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)),0,"LGT");
		var copyrightCollection = new GCopyrightCollection();
		copyrightCollection.addCopyright(copyright);

		var tilelayers1 = [new GTileLayer(copyrightCollection , 1, 17)];
		tilelayers1[0].getTileUrl = CustomGetTileUrl1;
		var tilelayers2 = [new GTileLayer(copyrightCollection , 1, 17)];
		tilelayers2[0].getTileUrl = CustomGetTileUrl2;

		custommap1 = new GMapType(tilelayers1, new GMercatorProjection(18), "1", {errorMessage:"No data available"});
		map.addMapType(custommap1);
		custommap2 = new GMapType(tilelayers2, new GMercatorProjection(18), "2", {errorMessage:"No data available"});
		map.addMapType(custommap2);

		SetMapCenter();
		map.disableDragging();

		var print_adr = adr_check('f');
		if (print_adr != 'err'){
			map.zoomIn();
			if (adr_check('t') == 2)
				map.setMapType(custommap2);
			if (print_adr != 'undefined')
				getMarkers(print_adr);
		}
	}
}

function adr_check(p){
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		var pair;
		for (var i=0;i<vars.length;i++) {
			pair = vars[i].split("=");
			if (pair[0] == p) {
				while(pair[1].indexOf("%20") > 0)
					pair[1] = pair[1].replace("%20"," "); 
					return pair[1];
			}
		} 
		return "err";
}

function getMarkers(file_adr){
	removeMarkers();
	c_markerID = -1;
	urlstr = file_adr+"?"+Math.floor(Math.random()*(99999999));
	var request = GXmlHttp.create();
	request.open('GET', urlstr , true);
	request.onreadystatechange = function () {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			points = xmlDoc.documentElement.getElementsByTagName("p");
			if (points.length){
				for (var i = 0; i < points.length; i++) {
					if (points[i].getAttribute("status") == 'non-native')
						markers[i] = new GMarker(new GLatLng(parseFloat(points[i].getAttribute("x").replace(/,/,".")),parseFloat(points[i].getAttribute("y").replace(/,/,"."))), markerOptions_red);
					else
						markers[i] = new GMarker(new GLatLng(parseFloat(points[i].getAttribute("x").replace(/,/,".")),parseFloat(points[i].getAttribute("y").replace(/,/,"."))), markerOptions_green);
					markers[i].UserData = "Species: "+points[i].getAttribute("text")+"<br>Locality: "+points[i].getAttribute("locality")+"<br>Station: "+points[i].getAttribute("station")+"<br>Latitude: "+points[i].getAttribute("x")+"<br>Longitude: "+points[i].getAttribute("y")+"<br>Date: "+points[i].getAttribute("date")+"<br>IdPoint: "+points[i].getAttribute("ID")+"<br>Status: "+points[i].getAttribute("status")+"<br>SurveyType: "+points[i].getAttribute("type")+"<br>Reference: "+points[i].getAttribute("reference");
					markers[i].PointID = points[i].getAttribute("ID");
					GEvent.addListener(markers[i], "click", function() {
						if (c_markerID != -1) {
							c_markerID = getMarker(c_markerID);
							map.removeOverlay(c_marker);
							map.addOverlay(c_markerID);
						}
						map.removeOverlay(this);
						c_marker = new GMarker(this.getLatLng(), {zIndexProcess:on_top, icon:tinyIcon_white});
						map.addOverlay(c_marker);
						document.getElementById("point_info").innerHTML = this.UserData;
						c_markerID = this.PointID;
					});
					map.addOverlay(markers[i]);
				}
			}
		}
	}
	request.send(null);
}

function removeMarkers(){
	if (c_markerID != -1){
		document.getElementById("point_info").innerHTML = "";
		map.removeOverlay(c_marker);
	}
	for (var i = 0; i < markers.length; i++)
		map.removeOverlay(markers[i]);
	markers.length = 0;
}

function on_top (m, b){
	return GOverlay.getZIndex(m.getPoint().lat()) + 100000000;
}

function showMarker(ID){
	var tm = getMarker(ID);
	if (tm == 'err'){
		alert("Point not found");
	} else {
		if (c_markerID != -1) {
			c_markerID = getMarker(c_markerID);
			map.removeOverlay(c_marker);
			map.addOverlay(c_markerID);
		}
		map.removeOverlay(tm);
		c_marker = new GMarker(tm.getLatLng(), {zIndexProcess:on_top, icon:tinyIcon_white});
		map.addOverlay(c_marker);
		document.getElementById("point_info").innerHTML = tm.UserData;
		c_markerID = tm.PointID;
	}
}

function getMarker(ID){
	for (var i = 0; i < markers.length; i++){
		if (markers[i].PointID == ID){
			return markers[i];
		}
	}
	return 'err';
}

function mtype_change() {
	switch(document.getElementById("select_map").value){
		case 'World': window.location='map_world.html'; break
		case 'Europe': window.location='map_europe.html'; break
		case 'Black Sea Region': window.location='map_black.html'; break
		case 'Baltic Sea Region': window.location='map_baltic.html'; break
		case 'NE Baltic Sea': window.location='map_finish.html'; break
	}
}
