window.estofexPlotted = false;
window.estofexAreas = [];

var map = false;
var aSpritePositions = {	1: { 0: [60, 160],  1: [0, 160]},
							2: { 0: [70, 160],  1: [10, 160]},
							3: { 0: [80, 160],  1: [20, 160]},
							4: { 0: [90, 160],  1: [30, 160]},
							5: { 0: [100, 160], 1: [40, 160]},
							6: { 0: [110, 160], 1: [50, 160]}};
var infoWindow = false;

function load()
{
	if(sCountry == 'nl')
	{
		var oCenter = new google.maps.LatLng(51.913481, 5.110484);
		var sPolygonFile = 'nederland.js';
	}
	if(sCountry == 'be')
	{
		var oCenter = new google.maps.LatLng(51.118099, 4.209737);
		var sPolygonFile = 'belgie.js';
	}

	$.get("/json/" + sPolygonFile, function(data)
	{
		eval(data);
	});

	var mapOptions = {
		zoom: 7,
		center: oCenter,
		mapTypeId: google.maps.MapTypeId.HYBRID,
		streetViewControl: false,
		mapTypeControl: true
	};
	map = new google.maps.Map(document.getElementById('map'), mapOptions);

	loadGmapIcons(userIcons);
	loadStrikes();
	loadEstofex();
	loadSaltSpreaders();

}

function loadSaltSpreaders() {

	var _allowedWorkingCodes = ["gritting"];

	$.ajax({
		url: 'https://www.onweer-online.nl/cache/saltSpreaders.json',
		type: 'GET',
		dataType: 'JSON',
		success: function(oSpreaders) {
			$.each(oSpreaders.features, function(intSpreaderNumber, saltSpreader) {

				var oSpreaderProps = $.parseJSON(saltSpreader.properties.properties);

				if(_allowedWorkingCodes.indexOf(oSpreaderProps.status) > -1) {

					var markerLat = parseFloat(saltSpreader.geometry.coordinates[1]);
			        var markerLng = parseFloat(saltSpreader.geometry.coordinates[0]);

					var iconUrl = '/images/spreader-markers.png?cb='+Math.random();
					var saltSpreaderIcon = new google.maps.MarkerImage(iconUrl, new google.maps.Size(32, 32), new google.maps.Point(0, 0), new google.maps.Point(16, 20));
					var pPos = new google.maps.LatLng(markerLat, markerLng);

					if(window.stMap) {
						var stSpreader = new google.maps.Marker({
							position: pPos,
							map: window.stMap,
							icon: saltSpreaderIcon,
							clickable: false
						});

						markersArray.push(stSpreader);
					}

				}

			});
		}
	});

	$.ajax({
		url: 'https://www.onweer-online.nl/cache/saltSpreadersTracks.json',
		type: 'GET',
		dataType: 'JSON',
		success: function(oSpreaderTracks) {
			$.each(oSpreaderTracks.features, function(intSpreaderID, oData) {

				var spreaderPath = [];

				$.each(oData.geometry.coordinates, function(intWaypointIndex, wayPoints) {
					var spreaderWaypoint = new google.maps.LatLng(parseFloat(wayPoints[1]), parseFloat(wayPoints[0]));
					spreaderPath.push(spreaderWaypoint);
				});

				if(window.stMap) {
					var stSpreaderMapPath = new google.maps.Polyline({
						strokeColor: "#00b4ff",
						strokeOpacity: 0.5,
						strokeWidth: 6,
						fillOpacity: 0.3,
						path: spreaderPath,
						map: window.stMap
					});

					markersArray.push(stSpreaderMapPath);
				}

			});
		}
	});

}


function loadEstofex() {

	var date = new Date();
	var months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
	var days = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"];

	var itIsNow = String(date.getFullYear())+String(months[date.getMonth()])+String(days[date.getDate()]);

	if(!window.estofexPlotted) {

		downloadUrl("/cache/stormforecast.xml", function(data) {
			var xml = xmlParse(data); //xmlParse(data);


		    var validity = xml.documentElement.getElementsByTagName('start_time');
		    var validityDate = validity[0].getAttribute("value");
		   // console.log(validityDate.slice(0, -2));
		   // console.log(itIsNow);

		    if(validityDate.slice(0, -2) == itIsNow) {
			    var markers = xml.documentElement.getElementsByTagName("area");
			    var icons = xml.documentElement.getElementsByTagName("marker");
			    	for (var i = 0; i < icons.length; i++) {

						var markerLat = parseFloat(icons[i].getAttribute("lat"));
				        var markerLng = parseFloat(icons[i].getAttribute("lon"));
				        var markerType = icons[i].getAttribute("type");

				        if(markerType == "level 1") {
					        var spriteOffset = 0;
				        } else if(markerType == "level 2") {
					        var spriteOffset = 30;
				        } else if(markerType == "level 3") {
					        var spriteOffset = 60;
				        } else if(markerType == "thunder") {
					        var spriteOffset = 90;
				        } else if(markerType == "mdiscuss") {
					        var spriteOffset = 120;
				        }

						var iconUrl = '/images/estofex-markers.png?cb='+Math.random();

						var estofexIcon = new google.maps.MarkerImage(iconUrl, new google.maps.Size(30, 30), new google.maps.Point(spriteOffset, 0), new google.maps.Point(15, 15));

						var pPos = new google.maps.LatLng(markerLat, markerLng);

						if(window.stMap) {
							stEstoMarker = new google.maps.Marker({
								position: pPos,
								map: stMap,
								icon: estofexIcon
							});

							window.estofexAreas.push(stEstoMarker);
						}

					}


				    for (var i = 0; i < markers.length; i++) {
				      var path = [];
				      var points = markers[i].getElementsByTagName("point");

				      var warningType = markers[i].getAttribute('risktype');

				      if(warningType == "level 1") {
					      var colorCode = "#ff6c00";
					      var fillOpacity = 0.2;
					      var zIndex = 2;
					      var strokeWeight = 3;
					      var warningLevel = "ESTOFEX - Level 1</strong><br>5% kans op gevaarlijk weer binnen 40KM van een punt.<strong>";
				      } else if(warningType == "level 2") {
					      var colorCode = "#ff0c00";
					      var fillOpacity = 0.2;
					      var zIndex = 3;
					      var strokeWeight = 3;
					      var warningLevel = "ESTOFEX - Level 2</strong><br>15% kans op gevaarlijk weer binnen 40KM van een punt.<strong>";
				      } else if(warningType == "level 3") {
					      var colorCode = "#be25f0";
					      var fillOpacity = 0.2;
					      var zIndex = 4;
					      var strokeWeight = 3;
					      var warningLevel = "ESTOFEX - Level 3</strong><br>15% kans op <b>extreem</b> gevaarlijk weer binnen 40KM van een punt.<strong>";
				      } else if(warningType == "15thunder") {
					      var colorCode = "#ffb400";
					      var fillOpacity = 0;
					      var zIndex = 1;
					      var strokeWeight = 1;
					      var warningLevel = "ESTOFEX - 15% Kans op bliksem binnen 40KM van een punt";
				      } else if(warningType == "mdiscuss") {
					  	  var colorCode = "#33d618";
					      var fillOpacity = 0.2;
					      var zIndex = 4;
					      var strokeWeight = 3;
					      var warningLevel = "ESTOFEX - Mesoscale Discussion";
					  } else {
					      var colorCode = "#ffb400";
					      var fillOpacity = 0.2;
					      var zIndex = 1;
					      var strokeWeight = 2;
					      var warningLevel = "ESTOFEX - 50% Kans op bliksem binnen 40KM van een punt";
				      }

				      for (var j = 0; j < points.length; j++) {
				        var lat = parseFloat(points[j].getAttribute("lat"));
				        var lng = parseFloat(points[j].getAttribute("lon"));
				        var point = new google.maps.LatLng(lat,lng);
				        path.push(point);
				      }


				      var polyLineST = new google.maps.Polygon({
				        path: path,
				        strokeColor: colorCode,
				        fillColor: colorCode,
				        fillOpacity: fillOpacity,
				        strokeOpacity: 1.0,
				        strokeWeight: strokeWeight,
				        zIndex: zIndex,
				        warningLevel: warningLevel,
						map: stMap
				      });

				      if(window.stMap) {
				    	  window.estofexAreas.push(polyLineST);
				      }

				      polyLineST.addListener('click', addWarningLevels);
				      infoWindow = new google.maps.InfoWindow;

				}
		    }

			window.estofexPlotted = true;
		});

		downloadUrl("/cache/mesoscale.xml", function(data) {
		    var xml = xmlParse(data); //xmlParse(data);

		    var validity = xml.documentElement.getElementsByTagName('start_time');
		    var validityDate = validity[0].getAttribute("value");

		    if(validityDate.slice(0, -2) == itIsNow) {
			    var markers = xml.documentElement.getElementsByTagName("area");
			    var icons = xml.documentElement.getElementsByTagName("marker");
			    	for (var i = 0; i < icons.length; i++) {

						var markerLat = parseFloat(icons[i].getAttribute("lat"));
				        var markerLng = parseFloat(icons[i].getAttribute("lon"));
					    var spriteOffset = 120;

						var iconUrl = '/images/estofex-markers.png?cb='+Math.random();

						var estofexIcon = new google.maps.MarkerImage(iconUrl, new google.maps.Size(30, 30), new google.maps.Point(spriteOffset, 0), new google.maps.Point(15, 15));

						var pPos = new google.maps.LatLng(markerLat, markerLng);
						var marker = new google.maps.Marker({
							position: pPos,
							map: stMap,
							icon: estofexIcon
						});

						window.estofexAreas.push(marker);


					}


				    for (var i = 0; i < markers.length; i++) {
				      var path = [];
				      var points = markers[i].getElementsByTagName("point");

				  	  var colorCode = "#33d618";
				      var fillOpacity = 0.3;
				      var zIndex = 4;
				      var strokeWeight = 3;
				      var warningLevel = "ESTOFEX - Mesoscale Discussion</strong> Aandachtspunt eerdere waarschuwing(en)<strong>";

				      for (var j = 0; j < points.length; j++) {
				        var lat = parseFloat(points[j].getAttribute("lat"));
				        var lng = parseFloat(points[j].getAttribute("lon"));
				        var point = new google.maps.LatLng(lat,lng);
				        path.push(point);
				      }


				      var polylineST = new google.maps.Polygon({
				        path: path,
				        strokeColor: colorCode,
				        fillColor: colorCode,
				        fillOpacity: fillOpacity,
				        strokeOpacity: 1.0,
				        strokeWeight: strokeWeight,
				        zIndex: zIndex,
				        warningLevel: warningLevel
				      });


				      polylineST.setMap(stMap);
				      polylineST.addListener('click', addWarningLevels);
				      infoWindow = new google.maps.InfoWindow;
				      window.estofexAreas.push(polylineST);

				}
		    }
		});
	}

}

function addWarningLevels(event) {
	 infoWindow.setOptions({
	        maxWidth: 200
	 });


     infoWindow.setContent('<strong>'+this.warningLevel+'</strong><br><a href="https://estofex.org" target="_blank">Lees de waarschuwingstekst</a>');
	 infoWindow.setPosition(event.latLng);
     infoWindow.open(stMap);

}


function loadGmapIcons(aIcons)
{
	for(var iPos in aIcons["data"])
	{
		switch(aIcons["data"][iPos]["icontype"])
		{
			case "user":
				oDate = new Date(aIcons["data"][iPos]["time"]);
				sTijd = getTimeString(oDate);
				sThisCountry = aIcons["data"][iPos]["country"];

				sHTML = '<strong>'+aIcons["data"][iPos]["city"]+', '+sTijd+' uur</strong><br />'+aIcons["data"][iPos]["weather"]+'<br /><br />Poster: '+aIcons["data"][iPos]["poster"]+'<br /><br /><a href=\"#\" data-featherlight=\"/images/userimages/guestbook/zoom_'+aIcons["data"][iPos]["foto"]+'\"><img src="images/userimages/guestbook/'+aIcons["data"][iPos]["foto"]+'"></a>';

				break;
			case "knmi":
			case "kmi":
				sThisCountry = "nl";

				sHTML = '<strong>'+aIcons["data"][iPos]["city"]+', KNMI</strong><br />'+aIcons["data"][iPos]["weather"];

				if(aIcons["data"][iPos]["temp"]) sHTML += '<br />Temperatuur: '+aIcons["data"][iPos]["temp"]+' &deg;C';
				if(aIcons["data"][iPos]["lv"]) sHTML += '<br />Luchtvochtigheid: '+aIcons["data"][iPos]["lv"]+' %';

				sWind = aIcons["data"][iPos]["wind"];
				oWindRegEx = /[\d\,]/;
				fWind = oWindRegEx.exec(sWind);

				sHTML += '<br />Wind: '+sWind+' m/s ('+getWindBft(fWind)+' bft)';

				if(aIcons["data"][iPos]["sight"]) sHTML += '<br />Zicht: '+aIcons["data"][iPos]["sight"]+' meter';
				if(aIcons["data"][iPos]["hpa"]) sHTML += '<br />Luchtdruk: '+aIcons["data"][iPos]["hpa"]+' hPa';
				break;
		}

		if(aIcons["data"][iPos]["icontype"] == "kmi") sThisCountry = "be";

		aIconPos = aIcons["data"][iPos]["spos"].split("x");
		aIconPos1 = parseInt(aIconPos[0]); /* 10-9-2014 - Justin - om PHP error "is not a number" tegen te gaan*/
		aIconPos2 = parseInt(aIconPos[1]);
		appendGmapIcon(aIcons["data"][iPos]["city"], sThisCountry, aIconPos1, aIconPos2, aIcons["data"][iPos]["lat"], aIcons["data"][iPos]["long"], sHTML);
	}
}

function loadStrikes()
{
	for(var iStrike in lightningData["data"])
	{
		oDate = new Date(lightningData["data"][iStrike]["time"]);

		var iIcon = lightningData["data"][iStrike]["icon"];
		var iType = lightningData["data"][iStrike]["type"];

		var iX = lightningData["data"][iStrike]["x"];
		var iY = lightningData["data"][iStrike]["y"];



		var pPos = new google.maps.LatLng(iX, iY);

		//var sHtml = (iType?"IC":"CG")+(lightningData["data"][iStrike]["pol"]?"-":"+")+" ontlading, "+getTimeString(oDate)+" uur<br />lat: "+(Math.round(pPos.lat() * 100) / 100)+"<br />long: "+(Math.round(pPos.lng() * 100) / 100)+"<br />gemeten door: <a href=\"http://www.lightningmaps.org\" target=\"_blank\">LightningMaps.org</a>";
		var sHtml = "Tijd: "+getTimeString(oDate)+" uur<br />Lat: "+(Math.round(pPos.lat() * 100) / 100)+"<br />Lng: "+(Math.round(pPos.lng() * 100) / 100)+"<br />Gemeten door: <a href=\"https://www.lightningmaps.org\" target=\"_blank\">LightningMaps.org</a>";

		showStrike(pPos, iType, iIcon, sHtml);
	}
}

function getTimeString(oDate)
{
	sTime = prefixZero(oDate.getHours())+":"+prefixZero(oDate.getMinutes())+":"+prefixZero(oDate.getSeconds());
	return sTime;
}

function prefixZero(iInput)
{
	if(iInput < 10)
		return "0"+iInput;
	else
		return iInput;
}

/*
function createMarker(latlng, icoonX, icoonY, oIcon)
{
	var userIcon = new GIcon(oIcon);
	userIcon.sprite.top = icoonY;
	userIcon.sprite.left = icoonX;
	return new GMarker(latlng, {icon:userIcon});
}
*/

var markersArray = [];

function createMarker(fLat, fLng, icoonX, icoonY, sHTML)
{
	var icon = new google.maps.MarkerImage("/images/weericons/mastericon_small.png", new google.maps.Size(40, 40), new google.maps.Point(icoonX, icoonY), new google.maps.Point(20,20));

	var marker = new google.maps.Marker({
		position: new google.maps.LatLng(fLat, fLng),
		map: map,
		icon: icon
	});

	markersArray.push(marker);

	if(window.stMap) {
		var stTypeIcon = new google.maps.Marker({
			position: new google.maps.LatLng(fLat, fLng),
			map: window.stMap,
			icon: icon
		});

		markersArray.push(stTypeIcon);

		google.maps.event.addListener(stTypeIcon, 'click', function()
		{
			infoWindow.setPosition(new google.maps.LatLng(fLat +.1, fLng));
			infoWindow.setContent(sHTML);
			infoWindow.open(window.stMap);
		});
	}


	google.maps.event.addListener(marker, 'click', function()
	{
		infoWindow.setPosition(new google.maps.LatLng(fLat +.1, fLng));
		infoWindow.setContent(sHTML);
		infoWindow.open(map);
	});
}

function clearAllMarkers()
{
	for (var i = 0; i < markersArray.length; i++ )
	{
		markersArray[i].setMap(null);
	}
	markersArray = [];
}

function appendGmapIcon(address, country, icoonX, icoonY, fLat, fLong, sHTML)
{
	if(!fLat || !fLong)
	{
		oGeocoder = new google.maps.Geocoder();
		oGeocoder.geocode({
			address: address,
			region: country
		}, function(aMeh, aStatus)
		{
			if(typeof aMeh[0] == "undefined" || !aMeh[0]) return;

			fLat = aMeh[0].geometry.location.lat();
			fLng = aMeh[0].geometry.location.lng();

			createMarker(fLat, fLng, icoonX, icoonY, sHTML);
			$.get("/controller/geocache/", {"xpos": fLat, "ypos": fLng, "plaats": urlencode(address), "land": country});
		});
		return;
	}
	else
	{
		createMarker(fLat, fLong, icoonX, icoonY, sHTML);
	}
}

function showStrike(pPos, iType, iIcon, sHtml)
{

	// var iconPositions = [0,0,18,36,54,72,90];
	// var iconUrl = '/images/weericons/GMlightning-v2.png?cb='+Math.random();
	//
	// var strikeIcon = new google.maps.MarkerImage(iconUrl, new google.maps.Size(18, 18), new google.maps.Point(iconPositions[iIcon], 0), new google.maps.Point(9, 9));
	//
	// var marker = new google.maps.Marker({
	// 	position: pPos,
	// 	map: map,
	// 	icon: strikeIcon
	// });
	//
	// markersArray.push(marker);
	//
	// if(window.stMap) {
	//
	// 	/* var STmarker = new google.maps.Marker({
	// 		position: pPos,
	// 		map: window.stMap,
	// 		icon: strikeIcon
	// 	});
	//
	// 	markersArray.push(STmarker); */
	//
	// }
	//
	// google.maps.event.addListener(marker, 'click', function()
	// {
	// 	infoWindow.setPosition(pPos);
	// 	infoWindow.setContent(sHtml);
	// 	infoWindow.open(map);
	// });
}

function loadIconsByType(sType)
{
	switch(sType)
	{
		case "user_icons":
			loadGmapIcons(userIcons);
			break;
		case "knmi_icons":
			loadGmapIcons(knmiIcons);
			break;
		case "kmi_icons":
			loadGmapIcons(kmiIcons);
			break;
		case "strikes":
			// loadStrikes();
			break;
		case "estofex":
			loadEstofex();
			break;
		case "saltSpreaders":
			loadSaltSpreaders();
			break;


	}

}

function addGmapCheckboxListeners()
{
	$("#map_legend input[type=checkbox]").click(function()


	{
		bChecked = $(this).is(":checked");

		window.estofexAreas = [];

		if(bChecked == true)
		{
			loadIconsByType($(this).attr('name'));
		}
		else
		{
			clearAllMarkers();

			$("#map_legend input:checked").each(function()
			{
				loadIconsByType($(this).attr('name'));
			});
		}

	});

	var _html = $('html');
	setInterval(function() {
		window.estofexPlotted = true;
		_html.find('#map_legend input[type=checkbox]:checked').first().click().click();
	}, ((1000 * 60) * 5));
}

//]]>
