google.load("maps", "2",{"other_params":"hl=nl"});

function checkBounds() { 
    if (allowedBounds.contains(map.getCenter())) {
        return;
    }

    var c = map.getCenter();
    var x = c.lng();
    var y = c.lat();
    var maxX = allowedBounds.getNorthEast().lng();
    var maxY = allowedBounds.getNorthEast().lat();
    var minX = allowedBounds.getSouthWest().lng();
    var minY = allowedBounds.getSouthWest().lat();

    if (x < minX) {x = minX;}
    if (x > maxX) {x = maxX;}
    if (y < minY) {y = minY;}
    if (y > maxY) {y = maxY;}

    map.setCenter(new GLatLng(y, x));
}

function initialize_hmnq_google_maps(siteUrl,divID,largeMap,hideMap,zoom) {
	site_url = siteUrl;
	if (GBrowserIsCompatible()) {
		var zoomLevel = 13;
		
		// Locatie bepalen
		var clientLocation = google.loader.ClientLocation;
		if (clientLocation && clientLocation.latitude && clientLocation.longitude) {
			var clientLatitude = clientLocation.latitude;
			var clientLongitude = clientLocation.longitude;
		}
		else {
			var zoomLevel = 7;
			var clientLatitude = 52.335339;
			var clientLongitude = 5.515137;
		}
		
		// Map laden
		map = new google.maps.Map2(document.getElementById(divID));
		geocoder = new GClientGeocoder();
		
		// Bounds for The Netherlands
		allowedBounds = new GLatLngBounds(new GLatLng(50.46449795300867, 3.31787109375), new GLatLng(53.79416183737104, 7.239990234374999));
		map.setCenter(new GLatLng(clientLatitude, clientLongitude), zoomLevel);
		if (largeMap == 'true') {
			map.addControl(new GLargeMapControl3D());
			map.addControl(new GScaleControl());
		}
		else{
			map.addControl(new GSmallZoomControl3D());
		}
		
		updatePosition();

		if(map.isLoaded() && hideMap == 'true') {
			$("#"+divID).css("display","none");
		}
	}
}

function updatePosition() {
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var lngSpan = northEast.lng() - southWest.lng();
	var latSpan = northEast.lat() - southWest.lat();
}

function googleMaps2rd (southWest, northEast, extraParams) {
	returnVal = "";
	returnRdVal = "";
	
	$.ajax({type: "GET", url: site_url+"ajax_google_maps/lat/"+southWest.lat()+"/long/"+southWest.lng()+extraParams, async: false, success: 
		function(data){
			returnRdVal = returnRdVal + data;
			
			$.ajax({type: "GET", url: site_url+"ajax_google_maps/lat/"+northEast.lat()+"/long/"+northEast.lng()+extraParams, async: false, success: 
				function(data2){
					returnRdVal = returnRdVal + "-" + data2;
				}
			});
		}
	});
	return returnRdVal;
}

function updateRiskButton(buttonId) {
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	
	if (allowedBounds.contains(map.getCenter())) {
		$("p.error_"+buttonId).fadeOut();
		rdCoordinates = googleMaps2rd(southWest,northEast,"");
		zoomLevel = map.getBoundsZoomLevel(bounds);
		
		riskMapUrl = $("a#" + buttonId).attr("href");
		oldVal = riskMapUrl;
		newVal = oldVal + "?rd="+rdCoordinates+"&zoom="+zoomLevel;
		$("a#" + buttonId).attr("href",newVal);
		return true;
	}
	else {
		$("p.error_"+buttonId).html('De risicokaart werkt alleen binnen Nederland');
		$("p.error_"+buttonId).fadeIn();
		
		return false;
	}
}

function showAddressOnMap(inputId) {
	
	address = $("input#" + inputId).val();

	if(validatePostalCode(address)) {
		if(address.length > 6) {
			address = address.split(' ').join('');
		}
	}
	address = address + ' Nederland';
	geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
				$("p.error_"+inputId).html("De locatie '"+address + "' kan niet gevonden worden.");
				$("p.error_"+inputId).fadeIn();
			} else {
				$("p.error_"+inputId).fadeOut();
				map.clearOverlays();
				map.setCenter(point, 13);
				var marker = new GMarker(point);
				map.addOverlay(marker);
			}
		}
	);
}

/* riskmap functions */
function fetch_riskmap(imgId) {
	// Todo: add some kind of logging to check how long it takes to load the image
	$("img#"+imgId).load(function(){
		$("#loading_riskmap").css("display","none");
		$("img#"+imgId).fadeIn();
		check_riskmapImg (imgId);
	});
	
	if($("img#"+imgId)[0].complete){
		$("#loading_riskmap").css("display","none");
		$("img#"+imgId).fadeIn();
		check_riskmapImg (imgId);
	}
	
	//$(document).ready( function() {
		//Needed to make it work in IE
		//check_riskmapImg (imgId);
	//});
}

function check_riskmapImg (imgId) {
	img = $("img#"+imgId);

	var width = img.width();
	var height = img.height();
	if (height < 440) {
		//alert(width+" - " +height);
		$("img#"+imgId).css("display","none");
		$("#loading_riskmap").text('Kaart kon niet worden geladen.');
		$("#loading_riskmap").css("color","#FF6633");
		$("#loading_riskmap").css("display","block");
	}
}

/* factsheet functions */
function initialize_factsheet_from_input(button_id,input_id,download_url) {
		
		if (GBrowserIsCompatible()) {
		var zoomLevel = 13;
		
		// Locatie bepalen
		var clientLocation = google.loader.ClientLocation;
		if (clientLocation && clientLocation.latitude && clientLocation.longitude) {
			var clientLatitude = clientLocation.latitude;
			var clientLongitude = clientLocation.longitude;
		}
		else {
			var zoomLevel = 7;
			var clientLatitude = 52.335339;
			var clientLongitude = 5.515137;
		}
		
		// Map laden
		map_fact = new google.maps.Map2(document.getElementById("hidden_map_"+button_id));
		geocoder = new GClientGeocoder();
		
		// Bounds for The Netherlands
		allowedBounds = new GLatLngBounds(new GLatLng(50.46449795300867, 3.31787109375), new GLatLng(53.79416183737104, 7.239990234374999));
		
		map_fact.setCenter(new GLatLng(clientLatitude, clientLongitude), zoomLevel);

		map_fact.addControl(new GLargeMapControl3D());
		map_fact.addControl(new GScaleControl());
		
		updatePosition();
	}
	
	$("#hidden_map_"+button_id).css("visibility","hidden");//275
	$("#hidden_map_"+button_id).css("margin-bottom","-275px");//275
}

// Update the hidden google maps en update download link with updateFactsheetDownloadButton()
function showFactsheetAddressOnMap(inputId,buttonId,downloadUrl) {
	address = $("input#" + inputId).val();

	if(address != '' && validatePostalCode(address)) {
	
		if(validatePostalCode(address)) {
			if(address.length > 6) {
				address = address.split(' ').join('');
			} 
		}
		address = address + ' Nederland';
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					$("p.error_factsheet_postal").html("De locatie '"+address + "' kan niet gevonden worden.");
					$("p.error_factsheet_postal").fadeIn();
				} else {
					map_fact.clearOverlays();
					map_fact.setCenter(point, 13);
					var marker = new GMarker(point);
					map_fact.addOverlay(marker);
					if (updateFactsheetDownloadButton(buttonId,downloadUrl)) {
						window.open($("a#" + buttonId).attr("href"));
					}
				}
			}
		);
		return true;
	} else {
		$("p.error_factsheet_postal").html("Vul een geldige postcode in.");
		$("p.error_factsheet_postal").fadeIn();			
		return false;
	}
}

// Updating the download button with the correct region
function updateFactsheetDownloadButton(buttonId,downloadUrl) {
	var bounds = map_fact.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	
	if (allowedBounds.contains(map_fact.getCenter())) {
		$("p.error_factsheet_postal").fadeOut();
		rdCoordinates = googleMaps2rd(southWest,northEast,"/roundnumbers/true");
		newVal = downloadUrl+rdCoordinates.replace( new RegExp("-", 'g'),",");
		$("a#" + buttonId).attr("href",newVal);
		_gaq.push(['_trackPageview', newVal]);
		return true;
	}
	else {
		$("p.error_factsheet_postal").html('De risicokaart werkt alleen binnen Nederland');
		$("p.error_factsheet_postal").fadeIn();
		return false;
	}
}

// Update the download button with the region given in the URL
function initialize_factsheet(button_id,region,download_url,risk) {
	if(risk != '') {
		$("#"+button_id).attr("href",download_url+risk);
	} else if (region != "") {
		$("#"+button_id).attr("href",download_url+region);
	}
}

//Send the factsheet e-mail form
function send_factsheet_homepage_form() {
	errorMessage = "";
	errorMessage = errorMessage + "";
	
	if ($("input#factsheet_postal").val() != undefined) {
		if ($("input#factsheet_postal").val() == "") {
			errorMessage = errorMessage + "Er is geen postcode ingevuld.<br/>";
		}
		if ($("input#factsheet_postal").val() != "" && !isValidPostalCode($("input#factsheet_postal").val())) {
			errorMessage = errorMessage + "Vul een geldige postcode in<br/>";
		}
	}
	if ($("input#factsheet_download_email").val() == "") {
		errorMessage = errorMessage + "Geen e-mailadres ingevuld.<br/>";
	}
	if ($("input#factsheet_download_email").val() != "" && !isValidEmailAddress($("input#factsheet_download_email").val())) {
		errorMessage = errorMessage + "Geen geldig e-mailadres ingevuld.<br/>";
	}
	if (!$("#chk-1").attr("checked")) {
		errorMessage = errorMessage + "'Hou mij op de hoogte van wijzigingen in de risicoinformatie' niet aangevinkt.<br/>";
	}
	
	if (errorMessage != "") {
		// Don't send form, show errors.
		hideDiv('factsheet_email_status');
		$("p.error_factsheet_postal").html(errorMessage);
		$("p.error_factsheet_postal").fadeIn();
	}
	else {
		
		var postal = $("input#factsheet_postal").val();
		var email = $("input#factsheet_download_email").val();
		var risks = $('div#risks_onmap').html();
		var keepinformed = 1;

		if(postal != '' && validatePostalCode(postal)) {
		
			if(validatePostalCode(postal)) {
				if(postal.length > 6) {
					postal = postal.split(' ').join('');
				} 
			}
			postal = postal + ' Nederland';
			
			geocoder.getLatLng(
					postal,
				function(point) {
					if (!point) {
						//alert("De locatie '"+address + "' kan niet gevonden worden.");
						$("p.error_factsheet_postal").html("De locatie '"+postal + "' kan niet gevonden worden.");
						$("p.error_factsheet_postal").fadeIn();
					} else {
						map_fact.clearOverlays();
						map_fact.setCenter(point, 13);
						var marker = new GMarker(point);
						map_fact.addOverlay(marker);
					}
				}
			);
		} else {
			$("p.error_factsheet_postal").html("Vul een geldige postcode in.");
			$("p.error_factsheet_postal").fadeIn();			

		}

		// haal de bounds op vanaf de verborgen kaart
		var bounds = map_fact.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		
		if (allowedBounds.contains(map_fact.getCenter())) {
			$("p.error_factsheet_postal").fadeOut();
			rdCoordinates = googleMaps2rd(southWest,northEast,"/roundnumbers/true");
			nb = rdCoordinates;
		}
		else {
			$("p.error_factsheet_postal").html('De risicokaart werkt alleen binnen Nederland');
			$("p.error_factsheet_postal").fadeIn();
		}
		
		// Send form
		$.ajax({type: "POST", url: site_url+"ajax_abonnement", data: {act: "homepage", email: email, bounds: nb, postal: postal}, async: false, success: 
			function(data){
				message = data;
			}
		});
		
		$("p.error_factsheet_postal").fadeOut( function() {
			// Show sent popup
			$("div#factsheet_email_status").html(message);
			$("div#factsheet_email_status").fadeIn('fast');				
		});
	}
}

function showAbonnementAddressOnMap(inputId) {
	address = $("input#" + inputId).val();
		
	if(validatePostalCode(address)) {
		if(address.length > 6) {
			address = address.split(' ').join('');
		}
	}
	address = address + ' Nederland';

	geocoder = new GClientGeocoder();
	geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
				$("p.error_factsheet_postal").html("De locatie '"+address + "' kan niet gevonden worden.");
				$("p.error_factsheet_postal").fadeIn();
			} else {
				map_fact.clearOverlays();
				map_fact.setCenter(point, 13);
				
				var marker = new GMarker(point);
				map_fact.addOverlay(marker);
				
				var map_bounds = map_fact.getBounds();
				var southWest = map_bounds.getSouthWest();
				var northEast = map_bounds.getNorthEast();
				
				nb = getBounds(southWest.lat(),southWest.lng(), northEast.lat(), northEast.lng());
				return nb;
			}
		}
	);
}


function getBounds(swlat, swlng, nelat, nelng) {
	
	bounds_str = '';
	$.ajax({type: "GET", url: site_url+"ajax_google_maps/lat/"+swlat+"/long/"+swlng+'/roundnumbers/true', async: false, success: 
		function(data){
		bounds_str = bounds_str + data;
			
			$.ajax({type: "GET", url: site_url+"ajax_google_maps/lat/"+nelat+"/long/"+nelng+'/roundnumbers/true', async: false, success: 
				function(data2){
				bounds_str = bounds_str + "," + data2;
				}
			});
		}
	});
	return bounds_str;
}



function send_abonnement_riskmap_form(bounds) {
	errorMessage = "";

	if ($("input#abonnement_email").val() == "") {
		errorMessage = errorMessage + "Geen e-mailadres ingevuld.<br/>";
	}
	if ($("input#abonnement_email").val() != "" && !isValidEmailAddress($("input#abonnement_email").val())) {
		errorMessage = errorMessage + "Geen geldig e-mailadres ingevuld.<br/>";
	}
	if (!$("#chk-1").attr("checked")) {
		errorMessage = errorMessage + "'Hou mij op de hoogte van wijzigingen in de risicoinformatie' niet aangevinkt.<br/>";
	}
	
	if (errorMessage != "") {
		hideDiv('abonnement_status');
		// Don't send form, show errors.
		$("p.error_abonnement").html(errorMessage);
		$("p.error_abonnement").fadeIn();
	}
	else {
		
		var email = $("input#abonnement_email").val();
		var risks = $('div#risks').html();
		var keepinformed = 1;
		
		// Send form
		$.ajax({type: "POST", url: site_url+"ajax_abonnement", data: {act: "riskmap", email: email, bounds: bounds, risks: risks}, async: false, success: 
			function(data){
				message = data;
			}
		});
		
		$("p.error_abonnement").fadeOut( function() {
			// Show sent popup
			$("div#abonnement_status").html(message);
			$("div#abonnement_status").fadeIn('fast');

		});
	}
}


function send_abonnement_riskpage_form(risks) {
	errorMessage = "";
	
	if ($("input#riskpage_email").val() == "") {
		errorMessage = errorMessage + "Geen e-mailadres ingevuld.<br/>";
	}
	if ($("input#riskpage_email").val() != "" && !isValidEmailAddress($("input#riskpage_email").val())) {
		errorMessage = errorMessage + "Geen geldig e-mailadres ingevuld.<br/>";
	}
	if (!$("#chk-1").attr("checked")) {
		errorMessage = errorMessage + "'Hou mij op de hoogte van wijzigingen in de risicoinformatie' niet aangevinkt.<br/>";
	}
	
	if (errorMessage != "") {
		// Don't send form, show errors.
		hideDiv('riskpage_status');
		$("p.error_riskpage").html(errorMessage);
		$("p.error_riskpage").fadeIn();
	}
	else {
		
		var email = $("input#riskpage_email").val();
		var keepinformed = 1;
		
		// Send form
		$.ajax({type: "POST", url: site_url+"ajax_abonnement", data: {act: "riskpage", email: email, risks: risks}, async: false, success: 
			function(data){
				message = data;
			}
		});
		
		$("p.error_riskpage").fadeOut( function() {
			// Show sent popup
			$("div#riskpage_status").html(message);
			$("div#riskpage_status").fadeIn('fast');
		});
	}
}


function hideDiv(div) {
	$("#"+div).fadeOut('fast');
}

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
}

function isValidPostalCode(zipCode) {
	var pattern = new RegExp(/(^\d{4}\D{2}$)|(^\d{4} \D{2}$)/);
	return pattern.test(zipCode);
}

function validatePostalCode(str) {
	  return typeof str=='string'
	    ?str.match(/[1-9][0-9]{3} ?[a-zA-Z]{2}/)==str
	    :false;
}

