

  
    
      
        
          
            
            	
	              
                  
	                  
											
                    		document.write('<script src="http://maps.google.com/maps?ie=iso-8859-1&oe=utf-8&file=api&v=2&key=ABQIAAAAJeJIudqlWzZZMXnr63qnTBRo1RaoJGEJ1ij8yXu58zD2CcxslRSrX2uJ4eByCAf48btmotvcYmhM7A&hl=da" type="text/javascript" charset="utf-8"></script>');
											
										
                  
								
							
            
          
        
      
    
  

function convertTM(tempPair, projection, zone, hemi ) {

  switch (projection) {
  case '2':
    var origLon = 6*(parseInt(zone) - 1) - 177;
    var origLat  = 0;
    var falseEast  = 500000;
    var falseNorth = 0;
    if (hemi == '2') falseNorth = 10000000;
    break;
  case '3':
    var origLon = -114;
    var origLat  = 42 * Math.PI / 180;
    var falseEast  = 2500000;
    var falseNorth = 1200000;
    break;
  }

  var east  = tempPair[0] - falseEast;
  var north = tempPair[1] - falseNorth;

  var a = 6378137.0000;
  var b = 6356752.3142;

  var centScale = 0.9996;

  var eccSq  = 1 - Math.pow(b/a,2);
  var eccSq2 = Math.pow(a/b,2) - 1;

  var n = (a - b) / (a + b);

  var meridNaught = 0;
  if (origLat != 0) {
    meridNaught  = (1 - 1/4 * eccSq - 3/64   * Math.pow(eccSq,2) -  5/256  * Math.pow(eccSq,3)) * origLat;
    meridNaught -= (    3/8 * eccSq + 3/32   * Math.pow(eccSq,2) + 45/1024 * Math.pow(eccSq,3)) * Math.sin(2*origLat);
    meridNaught += (                 15/256  * Math.pow(eccSq,2) + 45/1024 * Math.pow(eccSq,3)) * Math.sin(4*origLat);
    meridNaught -= (                 35/3072 * Math.pow(eccSq,3)                              ) * Math.sin(6*origLat);
    meridNaught *= a
  }

  var meridArc = north / centScale + meridNaught;

  var mu = meridArc / (a * (1 - eccSq/4 - 3/64 * Math.pow(eccSq,2) - 5/256 * Math.pow(eccSq,3)));

  var fp1 =    3/2   * n             - 27/32 * Math.pow(n,3);
  var fp2 =   21/16  * Math.pow(n,2) - 55/32 * Math.pow(n,4);
  var fp3 =  151/96  * Math.pow(n,3);
  var fp4 = 1097/512 * Math.pow(n,4);

  var fpLat = mu + fp1*Math.sin(2*mu) + fp2*Math.sin(4*mu) + fp3*Math.sin(6*mu) + fp4*Math.sin(8*mu);

  var c1 = eccSq2 * Math.pow(Math.cos(fpLat),2);
  var t1 =          Math.pow(Math.tan(fpLat),2);

  var curvePara =  Math.sqrt(1 - eccSq * Math.pow(Math.sin(fpLat),2));

  var curvePerp = a / curvePara;
  var curvePara = Math.pow(b,2) / a / Math.pow(curvePara,3);

  var d = east / curvePerp / centScale;

  var g1 = curvePerp * Math.tan(fpLat) / curvePara;
  var g2 = Math.pow(d,2) / 2;
  var g3 = ( 5 +  3*t1 +  10*c1                     - 4*Math.pow(c1,2) -   9*eccSq2) * Math.pow(d,4) / 24;
  var g4 = (61 + 90*t1 + 298*c1 + 45*Math.pow(t1,2) - 3*Math.pow(c1,2) - 252*eccSq2) * Math.pow(d,6) / 720;

  var h1 = d;
  var h2 = (1  +  2*t1 +     c1)                                                     * Math.pow(d,3) / 6;
  var h3 = (5  + 28*t1 -   2*c1 + 24*Math.pow(t1,2) - 3*Math.pow(c1,2) +   8*eccSq2) * Math.pow(d,5) / 120;

  var lat = fpLat - g1 * (g2 - g3 + g4);
  var lon = (h1 - h2 + h3) / Math.cos(fpLat);

  lat = lat * 180 / Math.PI;
  lon = lon * 180 / Math.PI + origLon;
  return new Array(lon,lat);
}

	
function projection_onclick() { 
		switch (document.coordForm.projection.value) {
		case '1':
			var zoneStr = '';
			var hemiStr = '';
	 		var formatStr = 'Longitude, Latitude (eg. 12.584753, 55.68000)';
			break;
		case '2':
			var zoneStr  = 'Select zone:&nbsp;<input type="text" name=zone size=2 value="32">';
			var hemiStr  = '<select name=hemi size=1>';
			    hemiStr += '<option value=1 selected>North';
			    hemiStr += '<option value=2>South';
			    hemiStr += '</select>';
		 	var formatStr = 'Easting, Northing (eg. 725373.48,6176197.59)';
			break;
		case '3':
			var zoneStr = '';
			var hemiStr = '';
		 	var formatStr = 'Easting, Northing';
			break;
		}
  		document.getElementById("setZone").innerHTML = zoneStr;
  		document.getElementById("setHemi").innerHTML = hemiStr;
  		document.getElementById("coordFormat").innerHTML = formatStr;
}

function mapLines_onclick() { 
		if (document.coordForm.mapLines.checked == true) {
			var connectStr = '&nbsp;&nbsp;<input type="checkbox" name=closeCheck>&nbsp;Connect first and last points?';
		} else var connectStr = '';
  		document.getElementById("connectEndpoints").innerHTML = connectStr;
}

function reDrawButton_onclick() {
		var points = readPoints();
		if (points.length == 0) alert('No valid points have been entered');
		var gPoints = [];
		for (var i = 0; i < points.length; i++) gPoints.push(new GPoint(points[i][0],points[i][1]));
		drawPoints(gPoints);
}

function drawButton_onclick() {
		var points = readPoints();
		if (points.length == 0) alert('No valid points have been entered');
		var gPoints = [];

		var minLon = points[0][0];
		var maxLon = points[0][0];
		var minLat = points[0][1];
		var maxLat = points[0][1];
		for (var i = 0; i < points.length; i++) {
			minLon = Math.min(minLon,points[i][0]);
			maxLon = Math.max(maxLon,points[i][0]);
			minLat = Math.min(minLat,points[i][1]);
			maxLat = Math.max(maxLat,points[i][1]);
			gPoints.push(new GPoint(points[i][0],points[i][1]));
		} 

		var midLat = (minLat + maxLat) / 2;
		var midLon = (minLon + maxLon) / 2;

		if (document.coordForm.autoZoom.checked == true) { 
			var zoom = Math.max((maxLon - minLon),(maxLat - minLat));
			zoom = zoom / 0.00539 / Math.cos(midLat / 180 * Math.PI);
			zoom = Math.log(zoom) / Math.LN2;
			zoom = Math.ceil(zoom)
		} else { 
			var zoom = document.coordForm.zoom.value;
		}

		if ((isNaN(zoom) == true) || (zoom < 0) || (zoom > 15)) {
			alert('Zoom must be between 0 and 15');
		} else if ((points.length == 1) && (document.coordForm.mapLines.checked == true)) {
			alert('Multiple points are needed to draw lines');
		} else {
			map.centerAndZoom(new GPoint(midLon, midLat),zoom);
			drawPoints(gPoints);
		}
}

function readPoints() { 
		var points = new Array();
		coordPairs = document.coordForm.coordText.value.split('\r\n');
		if (coordPairs.length == 1) coordPairs = document.coordForm.coordText.value.split('\r');
		if (coordPairs.length == 1) coordPairs = document.coordForm.coordText.value.split('\n');

		for (var i = 0; i < coordPairs.length; i++) {

			var tempPair = coordPairs[i].split(',');
			if (tempPair.length > 2) alert('Coordinate ' + (i+1) + ': Too many elements');
			if ((tempPair.length == 1) && (isNaN(tempPair.value) == false)) {
				alert('Coordinate ' + (i+1) + ': Too few elements');
				break;
			}
			if (tempPair.length == 2) {
				var tempLon = parseFloat(tempPair[0]); 
				var tempLat = parseFloat(tempPair[1]); 
				
				switch (document.coordForm.projection.value) {
				case '1':
					if ((isNaN(tempLat) == true) || (tempLat < -90) || (tempLat > 90)) {
						alert('Coordinate ' + (i+1) + ': Latitude must be between -90 and 90');
						break;
					} else if ((isNaN(tempLon) == true) || (tempLon < -180) || (tempLon > 180)) {
						alert('Coordinate ' + (i+1) + ': Longitude must be between -180 and 180');
						break;
					}
					break;
				default:
					//tempPair = convertTM(tempPair);
					break;
				}
				points.push(tempPair);
		}	}
		return points;
}

function drawPoints(gPoints) {
		map.clearOverlays();
		if (document.coordForm.mapPoints.checked == true) 
			for (var j = 0; j < gPoints.length; j++) map.addOverlay(new GMarker(gPoints[j]));
		if (document.coordForm.mapLines.checked == true) { 
			if (document.coordForm.closeCheck.checked == true) gPoints.push(gPoints[0]);
			map.addOverlay(new GPolyline(gPoints));
	}
}

// Returns a GPoint pointing at the spot at [x,y] pixels into the map,
// counting from the upper left corner of the map area.
function getLatLongAtBitmapCoordinate( map, point ) {
    var type = map.getCurrentMapType();
    var bord = map.getBoundsLatLng();
    var zoom = map.getZoomLevel();
    var at = type.getBitmapCoordinate( bord.maxY, bord.minX, zoom );
    //return type.getLatLng( at.x + point.x, at.y + point.y, zoom ); 
    return Array(at.x, at.y); 
}

function zoom(level) {
      map.centerAndZoom(map.getCenterLatLng(), level);
}

function calculateGoogleZoom(googleZoomLevel, direction) {
      var zoomLevel =  16 - googleZoomLevel;
      var zoomFactor = 1;
      for(i = 0; i < 5; i++) {
        if(document.kort.zfac[i].checked) {
          zoomFactor = document.kort.zfac[i].value;
        }
      }
      //alert("zfac: " + zoomFactor + " level: " + zoomLevel + "res" + (zoomLevel*zoomFactor));
      if(direction == 'in') {
        zoomLevel = Math.floor(zoomLevel * zoomFactor);
        alert("z: " + zoomLevel);
      }  else { // out
        zoomLevel = Math.floor(((16 - zoomLevel)+1) * zoomFactor);
        alert("z: " + zoomLevel);
        zoomLevel = 16 - zoomLevel;
      }
      // Back to google
      if(zoomLevel > 16) {
        zoomLevel = 16;
      }
      zoomLevel = 16 - zoomLevel;

      if(zoomLevel < 0) {
        zoomLevel = 0;
      }
      if(zoomLevel > 7) {
        zoomLevel = 7;
      }
      //alert("zoomLevel: " + zoomLevel);
      return zoomLevel;
}

// Creates a marker whose info window displays the given number
function createMarker(point, html,icon) {
  var marker = new GMarker(point,icon);
	if (html != '') {
  	GEvent.addListener(marker, "click", function() {
                     marker.openInfoWindowHtml(html);
                     });
	}
  return marker;
}

function makemap(div,initLon,initLat) {
  //var initLon = 11.779245;
  //var initLat = 55.452303;
  var initZoom = 3;
  var map = new GMap(document.getElementById(div));
  map.addControl(new GLargeMapControl());
  map.disableDragging();

  GEvent.addListener(map, "moveend", function() {
    var center = map.getCenterLatLng();
      var centerStr = 'Coordinates of map center: (' + center.x.toFixed(5) + ', ' + center.y.toFixed(5) + ')';
      document.getElementById("centerCoords").innerHTML = centerStr;

    var bounds = map.getBoundsLatLng();
    var width  = (bounds.maxX - bounds.minX) / 180 * Math.PI * 6378.137 * Math.cos(center.y / 180 * Math.PI);
    var height = (bounds.maxY - bounds.minY) / 360 * Math.PI * (6378.137 + 6356.7523142);
      var boundsStr = 'Extent of map: ' + width.toFixed(3) + ' x ' + height.toFixed(3) + ' km';
    document.getElementById("boundsCoords").innerHTML = boundsStr;
  });
	//map.setCenter(new GPoint(initLon,initLat),initZoom);
	map.centerAndZoom(new GPoint(initLon,initLat), initZoom);
	//var point = new GLatLng(initLon,initLat);
	//map.addOverlay(createMarker(point,'hej'));
}

function makeicon() {
	var icon = new GIcon();
  icon.image = "http://www.kultunaut.dk/images/map/prik-plus.png";
  icon.shadow = "http://www.kultunaut.dk/images/map/shadow-prik-plus.png";
  icon.iconSize = new GSize(20.0, 23.0);
  icon.shadowSize = new GSize(32.0, 23.0);
  icon.iconAnchor = new GPoint(10.0, 23.0);
  icon.infoWindowAnchor = new GPoint(10.0, 11.0);
	return icon;
}

function makemap2(div,initLon,initLat) {
	initZoom=15;
  map = new GMap2(document.getElementById(div));
	map.addControl(new GLargeMapControl());
	map.addControl(new GOverviewMapControl(new GSize(100,100)));
  //map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(150, 15)));
  map.setCenter(new GLatLng(initLat,initLon),initZoom);
	var point = new GLatLng(initLat,initLon);
  var icon = makeicon();
  map.addOverlay(createMarker(point,'',icon));
	return map;
}

function makemapsmall(div,initLon,initLat) {
  initZoom=15;
  map = new GMap2(document.getElementById(div));
  map.addControl(new GLargeMapControl());
  map.setCenter(new GLatLng(initLat,initLon),initZoom);
  var point = new GLatLng(initLat,initLon);
  var icon = makeicon();
  map.addOverlay(createMarker(point,'',icon));
  return map;
}


