﻿function KPMap() {

	var locations = {};
	var map = null;
	var country = '';
	var xmlurl = '/media/all.xml';
	var themarkers = null;
	var markersArray = [];

	this.InitMap = function (incountry) {
		country = incountry;

		map = new GMap2(document.getElementById("map_canvas"));

		if (country == 'denmark') {
			map.setCenter(new GLatLng(56.20889156789072, 11.09619140625), 7);
			xmlurl = '/media/denmark.xml';
		}
		else if (country == 'germany') {
			map.setCenter(new GLatLng(51.06901665960392, 11.0302734375), 6);
			xmlurl = '/media/germany.xml';
		}
		else if (country == 'copenhagen') {
			map.setCenter(new GLatLng(55.67351897240901, 12.572822570800781), 12);
			xmlurl = '/media/denmark.xml';
		}
		else if (country == 'aalborg') {
			map.setCenter(new GLatLng(57.04437191354046, 9.912242889404296), 12);
			xmlurl = '/media/denmark.xml';
		}
		else {
			map.setCenter(new GLatLng(52.72298552457069, 10.37109375), 5);
		}

		map.setUIToDefault();

		GDownloadUrl(xmlurl, function (data) {
			var xml = GXml.parse(data);

			var markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var name = markers[i].getAttribute("name");
				var address = markers[i].getAttribute("address");
				var type = markers[i].getAttribute("type");
				var zipcode = markers[i].getAttribute("zipcode");
				var city = markers[i].getAttribute("city");
				var phone = markers[i].getAttribute("telephone");
				var fax = markers[i].getAttribute("fax");
				var website = markers[i].getAttribute("website");
				var extraField = markers[i].getAttribute("extraField");
				var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
					    parseFloat(markers[i].getAttribute("lng")));
				var store = { latlng: latlng, name: name, address: address, type: type, city: city, phone: phone, website: website, zipcode: zipcode, fax: fax, extraField: extraField, lat: lat, lng: lng };
				var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
				latlngHash = latlngHash.replace(".", "").replace(".", "").replace("-", "");
				if (locations[latlngHash] == null) {
					locations[latlngHash] = []
				}
				locations[latlngHash].push(store);
			}
			for (latlngHash in locations) {
				var stores = locations[latlngHash];
				if (stores.length > 1) {
					map.addOverlay(kp.createClusteredMarker(stores));
				} else {
					map.addOverlay(kp.createMarker(stores));
				}
			}
		});

	}
	this.createMarker = function (stores) {
		var store = stores[0];
		if (store.type == 2845) {
			var baseIcon = new GIcon(G_DEFAULT_ICON);
			baseIcon.shadow = "/media/shadow.png";
			baseIcon.iconSize = new GSize(14, 23);
			baseIcon.shadowSize = new GSize(25, 25);
			baseIcon.iconAnchor = new GPoint(7, 12);
			baseIcon.infoWindowAnchor = new GPoint(9, 2);

			var letteredIcon = new GIcon(baseIcon);
			letteredIcon.image = "/media/parkingv2.png";
			// letteredIcon.image = "/media/parkingico.png";	

			var marker = new GMarker(store.latlng, letteredIcon);
		}
		else {
			marker = new GMarker(store.latlng);
		}

		var html = "<span style='font-weight:700'>" + store.name + "</span> <br/>" + store.address + "<br/>" + store.zipcode + "&nbsp;" + store.city;
		if (store.phone.length >= 2) { html += "<br/><br/><div class='lbl'>Tlf.</div>" + store.phone; }
		if (store.fax.length >= 2) { html += "<br/><div class='lbl'>Fax.</div>" + store.fax; }
		if (store.website.length >= 2) { html += "<br/><div class='lbl'>Web.</div> <a target='_blank' href='http://" + store.website + "'>" + store.website + "</a>"; }
		html += "<br/><br/><a target='_blank' href='http://maps.google.com/maps?f=d&source=s_d&saddr=" + store.address + "'>Kørselsvejledning</a>&nbsp;&nbsp;&nbsp;&nbsp;<a onclick='kp.zoomLocation(" + store.lat + "," + store.lng + ")' href='#'>Zoom til location</a>";
		GEvent.addListener(marker, 'click', function () {
			marker.openInfoWindowHtml(html);
		});

		return marker;
	}

	this.createClusteredMarker = function (stores) {
		var marker = new GMarker(stores[0].latlng);
		var html = "";
		for (var i = 0; i < stores.length; i++) {
			html = "<span style='font-weight:700'>" + stores[0].name + "</span> <br/>" + stores[0].address + "<br/>" + stores[0].zipcode + "&nbsp;" + stores[0].city;
			if (stores[0].phone.length >= 2) { html += "<br/><br/><div class='lbl'>Tlf.</div>" + stores[0].phone; }
			if (stores[0].fax.length >= 2) { html += "<br/><div class='lbl'>Fax.</div>" + stores[0].fax; }
			if (store.website.length >= 2) { html += "<br/><div class='lbl'>Web.</div> <a target='_blank' href='http://" + stores[0].website + "'>" + stores[0].website + "</a>"; }
			html += "<br/><br/><a target='_blank' href='http://maps.google.com/maps?f=d&source=s_d&saddr=" + stores[0].address + "'>Kørevejledning</a>&nbsp;&nbsp;&nbsp;&nbsp;<a onclick='kp.zoomLocation(" + stores[0].lat + "," + stores[0].lng + ")' href='#'>Zoom til forhandler</a>";
		}
		GEvent.addListener(marker, 'click', function () {
			marker.openInfoWindowHtml(html);
		});
		return marker;
	}

	this.zoomLocation = function (lat, lng) {
		map.closeInfoWindow()
		map.setCenter(new GLatLng(lat, lng), 15);
	}

	this.MarkerFactory = function (mymap, myMarkers) {
		var shadow = new google.maps.MarkerImage('http://www.google.com/mapfiles/shadow50.png',
		// The shadow image is larger in the horizontal dimension
		// while the position and offset are the same as for the main image.
	new google.maps.Size(37, 34),
	new google.maps.Point(0, 0),
	new google.maps.Point(6, 34));


		var max = myMarkers.length;
		for (var i = 0; i < max; i++) {
			(function (index) {
				var marker = new google.maps.Marker({
					position: myMarkers[index].position,
					map: mymap,
					title: myMarkers[index].title,
					icon: 'http://www.google.com/mapfiles/marker' + myMarkers[index].letter + '.png',
					shadow: shadow
				});

				google.maps.event.addListener(marker, 'click', function () { kp.onMarkerClick(myMarkers[index], marker); });

			})(i);
		}
	};

	this.onMarkerClick = function (myMarker) {
		document.location.href = '/page58.aspx?recordid58=' + myMarker.id;
	};

	this.LocationChange = function (that) {

		var id = that.options[that.selectedIndex].value;

		document.location.href = '/page58.aspx?recordid58=' + id;
	}

	this.InitSingleMarker = function (recid) {
		var sel = $elm('list_filter56');
		for (var i = 0; i < sel.options.length; i++) {
			var idrec = sel.options[i].value;
			if (idrec == recid) {
				$elm('list_filter56').options[i].selected = true;
			}
		}

		sel.options[0].text = "Se alle projekter";

		$elm('list_filter56').onchange = function () { kp.LocationChange(this) };

		var letter = $elm('layout58sub1mergefield45').getElementsByTagName('div')[0].innerHTML;
		var lat = $elm('layout58sub1mergefield54').getElementsByTagName('div')[0].innerHTML;
		var lng = $elm('layout58sub1mergefield55').getElementsByTagName('div')[0].innerHTML;

		$elm('layout58sub1mergefield45').style.display = 'none';
		$elm('layout58sub1mergefield54').style.display = 'none';
		$elm('layout58sub1mergefield55').style.display = 'none';

		var mainpos = new google.maps.LatLng(lat, lng);
		var myZoom = 15;
		var myOptions = {
			zoom: myZoom,
			center: mainpos,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};

		var mymap = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

		var shadow = new google.maps.MarkerImage('http://www.google.com/mapfiles/shadow50.png',
		// The shadow image is larger in the horizontal dimension
		// while the position and offset are the same as for the main image.
	new google.maps.Size(37, 34),
	new google.maps.Point(0, 0),
	new google.maps.Point(8, 34));

		var marker = new google.maps.Marker({
			position: new google.maps.LatLng(lat, lng),
			map: mymap,
			icon: 'http://www.google.com/mapfiles/marker' + letter + '.png',
			shadow: shadow
		});
	}
}

var kp = new KPMap();
