<!-- PA2P - Gert-Jan van den Berg - copyright -->

var map;
var map1;
var centerLatitude = 41.5;
var centerLongitude = 5.8836;
var startZoom = 2;
var deselectCurrent = function() {};

var PromoControl = function(url) {
	this.url_ = url;
};

PromoControl.prototype = new GControl(true);

PromoControl.prototype.initialize = function(map) {
	var container = document.createElement("div");
	container.innerHTML = '<img style="cursor:pointer" src="images/info2-small-1.png" border="0">';
	container.style.width='150px';
	container.style.height='52px';
	
	url = this.url_;
	
	GEvent.addDomListener(container, "click", function() {
		document.location = 'http://www.pa2p.nl';
	});
	
	map.getContainer().appendChild(container);
	
	return container;
};

PromoControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(-10, 30));
};

// Create our "tiny" marker icon
var tinyIcon = new GIcon();
tinyIcon.image = "images/mm_20_red.png";
tinyIcon.shadow = "images/mm_20_shadow.png";
tinyIcon.iconSize = new GSize(12, 20);
tinyIcon.shadowSize = new GSize(22, 20);
tinyIcon.iconAnchor = new GPoint(6, 20);
tinyIcon.infoWindowAnchor = new GPoint(5, 1);
// Set up our GMarkerOptions object literal
markerOptions = { icon:tinyIcon };

function initializePoint(pointData) {
	var point = new GLatLng(pointData.latitude, pointData.longitude);
	var marker = new GMarker(point, markerOptions);
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));
	var visible = false;

	listItemLink.href = "#";
	listItemLink.innerHTML = '<strong><font color="#012583">' + pointData.address + '<i>   (' + pointData.owner + ')</i></strong><span>' + pointData.height + '</span></font>';
	
	var focusPoint = function() {
		deselectCurrent();
		listItem.className = 'current';
		deselectCurrent = function() { listItem.className = ''; }
		marker.openInfoWindowHtml('<font size="5" face="Verdana, Arial, Helvetica, sans-serif"><b>' + pointData.address + '</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.qrz.com/db/' + pointData.address + '"><img src="images/qrzcom.gif" alt="go to www.qrz.com" border="0"></a><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br>' + pointData.city + '<br>' + pointData.state + '<br>' + pointData.height + '<br>WW-locator: ' + pointData.elevation + '<br><img src="http://files.qrz.com/' + pointData.id + '"></font>');   
		map.panTo(point);
		return false;
	}

	GEvent.addListener(marker, 'click', focusPoint);	

	listItemLink.onclick = focusPoint;

	pointData.show = function() {
		if (!visible) {
			document.getElementById('sidebar-list').appendChild(listItem);
			map.addOverlay(marker);
			visible = true;
		}
	}
	pointData.hide = function() {
		if (visible) {
			document.getElementById('sidebar-list').removeChild(listItem);
			map.removeOverlay(marker);
			visible = false;
		}
	}

	pointData.show();
}

function initializeSortTab(type) {
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));

	listItemLink.href = "#";
	listItemLink.innerHTML = type;
	listItemLink.onclick = function() {
		changeBodyClass('standby', 'loading');

		for(id in markers) {
			if (markers[id].type == type || 'All prefixes' == type)
				markers[id].show();
			else
				markers[id].hide();	
		}

		changeBodyClass('loading', 'standby');

		return false;
	}

	document.getElementById('filters').appendChild(listItem);
}

function windowHeight() {

	if (self.innerHeight)
		return self.innerHeight;

	if (document.documentElement && document.documentElement.clientHeight)
		return document.documentElement.clientHeight;

	if (document.body)
		return document.body.clientHeight;
	return 0;
}

function handleResize() {
	var height = windowHeight() - document.getElementById('toolbar').offsetHeight - 30;
	document.getElementById('map').style.height = height + 'px';
	document.getElementById('sidebar').style.height = height + 'px';
}

function changeBodyClass(from, to) {
	document.body.className = document.body.className.replace(from, to);
	return false;
}

function doGenerateMarkerHtmlCallback(marker,html,result) {
     html.innerHTML+="<b>Result Coordinates: "+result.lat+","+result.lng+"</b><br>";
     html.innerHTML+="<b>Marker Location: "+marker.getLatLng().toUrlValue()+"</b>";
     return html;
}

function init() {
	var type;
	var allTypes = { 'All prefixes':[] };
    var polylineClick = new GPolyline();
	
	document.getElementById('button-sidebar-hide').onclick = function() { return changeBodyClass('sidebar-right', 'nosidebar'); };
	document.getElementById('button-sidebar-show').onclick = function() { return changeBodyClass('nosidebar', 'sidebar-right'); };
	handleResize();

	map = new GMap2(document.getElementById("map"), {draggableCursor:"crosshair"},{googleBarOptions:
          {onGenerateMarkerHtmlCallback:doGenerateMarkerHtmlCallback}});
	map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
//  map.removeMapType(G_HYBRID_MAP);
	map.addMapType(G_PHYSICAL_MAP);
//  map.addMapType(G_SATELLITE_3D_MAP);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
//  MTMC.addMapControl(map, new MTMC.MapTypeMenuControl());
    map.addControl(new GOverviewMapControl(new GSize(80,80)));
    map.addControl(new GScaleControl());
	map.addControl(new PromoControl());
	map.disableDoubleClickZoom();           
//  map.enableContinuousZoom();
    map.enableScrollWheelZoom();
    map.enableGoogleBar();
    new GKeyboardHandler(map); 

    GEvent.addListener(map, "dblclick", function(overlay, latlng) {
	map.showMapBlowup(latlng, map.getZoom() + 1);
	});

	GEvent.addListener(map, "click", function(overlay, point) {
									  
        if (point) {
          var longDir;
          if (point.x < 0)
            longDir = "W"
          else
            longDir = "E";
          var latDir;
          if (point.y < 0)
            latDir = "S"
          else
            latDir = "N";
            
          var longDeg;
          var longMin;
          if (point.x > 0)
          {
            longDeg = Math.floor(point.x);
            longMin = (point.x - longDeg) * 100;
          }
          else
          {
            longDeg = Math.ceil(point.x);
            longMin = (longDeg - point.x) * 100;
          }
          var longMin2 = longMin * 60 / 100;
          var longSec = Math.round((longMin2 - Math.floor(longMin2)) * 60);

          var latDeg;
          var latMin;
          if (point.y > 0)
          {
            latDeg = Math.floor(point.y);
            latMin = (point.y - latDeg) * 100;
          }
          else
          {
            latDeg = Math.ceil(point.y);
            latMin = (latDeg - point.y) * 100;
          }
          var latMin2 = latMin * 60 / 100;
          var latSec = Math.round((latMin2 - Math.floor(latMin2)) * 60);
            
          var strHtml = "<font face='verdana' size='2'>";
		  strHtml += "Long .. " + Math.round(point.x * 10000) / 10000 + " " + longDir;
          strHtml += " (" + longDeg + "&deg; " + Math.floor(longMin2) + "' " + longSec + "'' "+ longDir + ")";
          strHtml += "<br>";
          strHtml += "Lat .... " + Math.round(point.y * 10000) / 10000 + " " + latDir;
          strHtml += " (" + latDeg + "&deg; " + Math.floor(latMin2) + "' " + latSec + "'' "+ latDir + ")";
          strHtml += "<br>";
 
    /******************************************************/
    /* Long/Lat to QTH locator conversion script inspired */
    /* from the code (c) of Laurent Haas F6FVY            */
    /******************************************************/
        
          var ychr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
          var ynum = "0123456789";
          var yqth, yi, yk, ydiv, yres, ylp, y;
          var y     = 0;
          var ycalc = new Array(0,0,0);
          var yn    = new Array(0,0,0,0,0,0,0);

          ycalc[1] = point.x + 180;
          ycalc[2] = point.y +  90;

          for (yi = 1; yi < 3; ++yi) {
            for (yk = 1; yk < 4; ++yk) {
              if (yk != 3) {
                if (yi == 1) {
                  if (yk == 1) ydiv = 20;
                  if (yk == 2) ydiv = 2;
                }
                if (yi == 2) {
                  if (yk == 1) ydiv = 10;
                  if (yk == 2) ydiv = 1;
                }

                yres = ycalc[yi] / ydiv;
                ycalc[yi] = yres;
                if (ycalc[yi]>0)
                  ylp = Math.floor(yres)
                else
                  ylp = Math.ceil(yres);
                ycalc[yi] = (ycalc[yi] - ylp) * ydiv;
              }
              else {
                if (yi == 1)
                  ydiv = 12
                else
                  ydiv = 24;

                yres = ycalc[yi] * ydiv;
                ycalc[yi] = yres;
                if (ycalc[yi] > 0)
                  ylp = Math.floor(yres)
                else
                  ylp = Math.ceil(yres);
              }

            ++y;
            yn[y] = ylp;
            }
          }

        yqth = ychr.charAt(yn[1]) + ychr.charAt(yn[4]) + ynum.charAt(yn[2]);
        yqth += ynum.charAt(yn[5]) + ychr.charAt(yn[3])+ ychr.charAt(yn[6]);

        strHtml += "Grid ... <b>" + yqth + "</b></font><br><font face='' size='0'><br><div align='center'><a href='http://www.pa2p.nl'><img src='images/info2-small-1.png' border='0'></font></a></div>";

         map.removeOverlay(polylineClick);
         delete polylineClick;
		 map.openInfoWindowHtml(point, strHtml);
		
		var bottomLeftLong = Math.floor(point.x / 0.0833333333) * 0.0833333333;
        var bottomLeftLat = Math.floor(point.y / 0.0416666666) * 0.0416666666;
               
          polylineClick = new GPolyline([
            new GLatLng(bottomLeftLat, bottomLeftLong),
            new GLatLng(bottomLeftLat, bottomLeftLong + 0.0833333333),
            new GLatLng(bottomLeftLat + 0.0416666666, bottomLeftLong + 0.0833333333),
            new GLatLng(bottomLeftLat + 0.0416666666, bottomLeftLong),
            new GLatLng(bottomLeftLat, bottomLeftLong)
          ], "#000000", 4);

          map.addOverlay(polylineClick);
		
		}
    });

    map.disableGoogleBar();
	GEvent.addListener(map, "mouseover", function(){
	map.enableGoogleBar();
	});

	GEvent.addListener(map, "mouseout", function(){
	map.disableGoogleBar();
	});


    map.hideControls();
	GEvent.addListener(map, "mouseover", function(){
	map.showControls();
	});

	GEvent.addListener(map, "mouseout", function(){
	map.hideControls();
	});

	for(id in markers) {
		initializePoint(markers[id]);
		allTypes[markers[id].type] = true;
	}

	for(type in allTypes) {
		initializeSortTab(type);
	}

	changeBodyClass('loading', 'standby');
}

window.onresize = handleResize;
window.onload = init;

<!-- PA2P - Gert-Jan van den Berg - copyright -->
