var map = null; var facility_tlo = null; var airport_tlo = null; var minor_airport_tlo = null; var sua_tlo = null; var moa_tlo = null; var lltr_tlo = null; var nmac_tlo = null; var mac_tlo = null; var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=facilities'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; facility_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=airports'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; airport_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=minor_airports'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; minor_airport_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=suas'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; sua_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=moas'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; moa_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=mtrs'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; lltr_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=nmacs'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; nmac_tlo = new GTileLayerOverlay(tlayer); var tlayer = new GTileLayer( new GCopyrightCollection('MACROsystems'),0,17); tlayer.getTileUrl = function(tile, zoom) { return '/tiles/png/tile.ashx' + '?x=' + tile.x + '&y=' + tile.y + '&z=' + zoom + '&tt=macs'; }; tlayer.getOpacity=function() { return 1.0; }; tlayer.isPng= function() { return false; }; mac_tlo = new GTileLayerOverlay(tlayer); function ToggleFacilities(checkbox) { //alert(checkbox.checked); var b = map.getBounds(); var z = map.getZoom(); var chkFacilities = document.getElementById("chkFacilities").checked; if (chkFacilities==true) { if (z > 5) { map.removeOverlay(facility_tlo); ShowFacilityMarkers(b); } else { map.removeOverlay(facility_tlo); map.addOverlay(facility_tlo); for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; facility_guids = []; } } else { if (facility_markers) { for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; facility_guids = []; } map.removeOverlay(facility_tlo); } }function ToggleAirports(checkbox) { var b = map.getBounds(); var z = map.getZoom(); var chkAirports = document.getElementById("chkAirports").checked; if (chkAirports==true) { if (z > 8) { map.removeOverlay(airport_tlo); ShowAirportMarkers(b); } else { map.removeOverlay(airport_tlo); map.addOverlay(airport_tlo); for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; airport_guids = []; } } else { if (airport_markers) { for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; airport_guids = []; } map.removeOverlay(airport_tlo); } }function ToggleMinorAirports(checkbox) { //alert(checkbox.checked); var b = map.getBounds(); var z = map.getZoom(); var chkMinorAirports = document.getElementById("chkMinorAirports").checked; if (chkMinorAirports==true) { if (z > 8) { map.removeOverlay(minor_airport_tlo); ShowMinorAirportMarkers(b); } else { map.removeOverlay(minor_airport_tlo); map.addOverlay(minor_airport_tlo); for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; minor_airport_guids = []; } } else { if (minor_airport_markers) { for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; minor_airport_guids = []; } map.removeOverlay(minor_airport_tlo); } }function ToggleMOAs(checkbox) { var b = map.getBounds(); var z = map.getZoom(); var chkMOAs = document.getElementById("chkMOAs").checked; if (chkMOAs==true) { if (z > 7) { map.removeOverlay(moa_tlo); ShowMOAMarkers(b); } else { map.removeOverlay(moa_tlo); map.addOverlay(moa_tlo); for (var m = 0; m < moa_markers.length; m++) { map.removeOverlay(moa_markers[m]); } moa_markers = []; moa_guids = []; } } else { if (moa_markers) { for (var m = 0; m < moa_markers.length; m++) { map.removeOverlay(moa_markers[m]); } moa_markers = []; moa_guids = []; } map.removeOverlay(moa_tlo); } flashMoas(); }function ToggleSUAs(checkbox) { var b = map.getBounds(); var z = map.getZoom(); var chkSUAs = document.getElementById("chkSUAs").checked; if (chkSUAs==true) { if (z > 7) { map.removeOverlay(sua_tlo); ShowSUAMarkers(b); } else { map.removeOverlay(sua_tlo); map.addOverlay(sua_tlo); for (var m = 0; m < sua_markers.length; m++) { map.removeOverlay(sua_markers[m]); } sua_markers = []; sua_guids = []; } } else { if (sua_markers) { for (var m = 0; m < sua_markers.length; m++) { map.removeOverlay(sua_markers[m]); } sua_markers = []; sua_guids = []; } map.removeOverlay(sua_tlo); } flashMoas(); }function ToggleLLTRs(checkbox) { var b = map.getBounds(); var z = map.getZoom(); var chkMTRs = document.getElementById("chkMTRs").checked; if (chkMTRs==true) { if (z > 7) { map.removeOverlay(lltr_tlo); ShowLLTRMarkers(b); } else { map.removeOverlay(lltr_tlo); map.addOverlay(lltr_tlo); for (var m = 0; m < lltr_markers.length; m++) { map.removeOverlay(lltr_markers[m]); } lltr_markers = []; lltr_guids = []; } } else { if (lltr_markers) { for (var m = 0; m < lltr_markers.length; m++) { map.removeOverlay(lltr_markers[m]); } lltr_markers = []; lltr_guids = []; } map.removeOverlay(lltr_tlo); } }function ToggleNMACs(checkbox) { var b = map.getBounds(); var z = map.getZoom(); var chkNMACs = document.getElementById("chkNMACs").checked; if (chkNMACs==true) { if (z > 8) { map.removeOverlay(nmac_tlo); ShowNMACMarkers(b); } else { map.removeOverlay(nmac_tlo); map.addOverlay(nmac_tlo); for (var m = 0; m < nmac_markers.length; m++) { map.removeOverlay(nmac_markers[m]); } nmac_markers = []; nmac_guids = []; } } else { if (nmac_markers) { for (var m = 0; m < nmac_markers.length; m++) { map.removeOverlay(nmac_markers[m]); } nmac_markers = []; nmac_guids = []; } map.removeOverlay(nmac_tlo); } }function ToggleMACs(checkbox) { var b = map.getBounds(); var z = map.getZoom(); var chkMACs = document.getElementById("chkMACs").checked; if (chkMACs==true) { if (z > 8) { map.removeOverlay(mac_tlo); ShowMACMarkers(b); } else { map.removeOverlay(mac_tlo); map.addOverlay(mac_tlo); for (var m = 0; m < mac_markers.length; m++) { map.removeOverlay(mac_markers[m]); } mac_markers = []; mac_guids = []; } } else { if (mac_markers) { for (var m = 0; m < mac_markers.length; m++) { map.removeOverlay(mac_markers[m]); } mac_markers = []; mac_guids = []; } map.removeOverlay(mac_tlo); } } var markers = []; var airport_markers = []; var minor_airport_markers = []; var facility_markers = []; var moa_markers = []; var sua_markers = []; var lltr_markers = []; var nmac_markers = []; var mac_markers = []; var airport_guids = []; var minor_airport_guids = []; var facility_guids = []; var moa_guids = []; var sua_guids = []; var lltr_guids = []; var nmac_guids = []; var mac_guids = []; var loader = null; function GetGuid(sxml) { var guid = sxml.getAttribute('guid'); return guid; } function AirportIsMajor(sxml) { var bIsMajor = false; var type = sxml.getAttribute('airfieldtype'); var airporttype = 'airport'; if (airporttype.toLowerCase() == type.toLowerCase()) { bIsMajor = true; } return bIsMajor; } function AirportMarkerAlreadyExists(guid) { var b_ret = false if (!airport_guids[guid]) { //airport_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function MinorAirportMarkerAlreadyExists(guid) { var b_ret = false; if (!minor_airport_guids[guid]) { //minor_airport_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function FacilityMarkerAlreadyExists(guid) { var b_ret = false; if (!facility_guids[guid]) { //facility_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function MOAMarkerAlreadyExists(guid) { var b_ret = false; if (!moa_guids[guid]) { //moa_guids[guid] = guid; // alert('in MOAMarkerAlreadyExistsFunction: ' + moa_markers[guid]); } else { b_ret = true; } return b_ret; } function SUAMarkerAlreadyExists(guid) { var b_ret = false; if (!sua_guids[guid]) { //sua_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function LLTRMarkerAlreadyExists(guid) { var b_ret = false; if (!lltr_guids[guid]) { //lltr_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function NmacMarkerAlreadyExists(guid) { var b_ret = false; if (!nmac_guids[guid]) { //nmac_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function MacMarkerAlreadyExists(guid) { var b_ret = false; if (!mac_guids[guid]) { //mac_guids[guid] = guid; } else { b_ret = true; } return b_ret; } function cleanupAirportMarkers() { var b = map.getBounds(); var z = map.getZoom(); if (z <= 8) { if (airport_markers) { for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; } } }function cleanupMinorAirportMarkers() { var b = map.getBounds(); var z = map.getZoom(); if (z <= 8) { if (minor_airport_markers) { for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; } } }function cleanupFacilityMarkers() { var b = map.getBounds(); var z = map.getZoom(); if (z <= 5) { if (facility_markers) { for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; } } } function ShowFacilityMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/facility/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var facilities = de.getElementsByTagName('facility'); if (facilities) { var facility = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < facilities.length; i++) { var facilityXML = facilities[i]; var guid = GetGuid(facilityXML); if (false == FacilityMarkerAlreadyExists(guid)) { facility = new Facility(facilityXML, ''); if (null != facility) { if(loader) { loader.add(facility, facility.show, true); } } // (null != facility) } // (false == FacilityMarkerAlreadyExists(guid)) } // for if (loader) { loader.execute(); } } // if (facilities) else { alert('No facilities found!'); } } // if (xmldoc) } // function ); } function ShowAirportMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/airport/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var airports = de.getElementsByTagName('airport'); if (airports) { var airport = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < airports.length; i++) { var airportXML = airports[i]; var bIsMajor = AirportIsMajor(airportXML); if (true == bIsMajor) { var guid = GetGuid(airportXML); if (false == AirportMarkerAlreadyExists(guid)) { airport = new Airport(airportXML, ''); if (null != airport) { if(loader) { loader.add(airport, airport.show, true); } } // if (null != airport) } // if (false == AirportMarkerAlreadyExists(guid)) } // if (false == bIsMajor) } // for if (loader) { loader.execute(); } } // if (airports) else { alert('No airports found!'); } } // if xmldoc }//end function ); } function ShowMinorAirportMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/airport/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var airports = de.getElementsByTagName('airport'); if (airports) { var airport = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < airports.length; i++) { var airportXML = airports[i]; var bIsMajor = AirportIsMajor(airportXML); if (false == bIsMajor) { var guid = GetGuid(airportXML); if (false == MinorAirportMarkerAlreadyExists(guid)) { airport = new Airport(airportXML, ''); if (null != airport) { if( loader && false == bIsMajor) { loader.add(airport, airport.show, true); } } // if (null != airport) } // if (false == AirportMarkerAlreadyExists(guid)) } // if (false == bIsMajor) } if (loader) { loader.execute(); } } else { alert('No airports found!'); } }//end xmldoc }//end function ); } function ShowMOAMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/moa/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var moas = de.getElementsByTagName('moa'); if (moas) { var moa = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < moas.length; i++) { var moaXML = moas[i]; var guid = GetGuid(moaXML); if (false == MOAMarkerAlreadyExists(guid)) { moa = new Moa(moaXML, ''); if (null != moa) { if (loader) { loader.add(moa, moa.show, true); } } } } if (loader) { loader.execute(); } } else { alert('No moas found!'); } }//end xmldoc }//end function ); } function ShowSUAMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/sua/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var suas = de.getElementsByTagName('sua'); if (suas) { var sua = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < suas.length; i++) { var suaXML = suas[i]; var guid = GetGuid(suaXML); if (false == SUAMarkerAlreadyExists(guid)) { sua = new Sua(suaXML, ''); if (null != sua) { if(loader) { loader.add(sua, sua.show, true); } } // (null != sua) } // (false == SUAMarkerAlreadyExists(guid)) } // for if (loader) { loader.execute(); } } // if (suas) else { alert('No suas found!'); } } // if (xmldoc) } // end function ); } function ShowLLTRMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/lltr/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var lltrs = de.getElementsByTagName('lltr'); if (lltrs) { var lltr = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < lltrs.length; i++) { var lltrXML = lltrs[i]; var guid = GetGuid(lltrXML); //must create a new object for each lltr coordinate set for (var c=0;c < lltrXML.getElementsByTagName('coordinates').length;c++) { guid += '-' + c; if (false == LLTRMarkerAlreadyExists(guid)) { lltr = new Lltr(lltrXML, c, ''); if (null != lltr) { if(loader) { loader.add(lltr, lltr.show, true); } } } } } if (loader) { loader.execute(); } } else { alert('No lltrs found!'); } }//end xmldoc }//end function ); } function ShowNMACMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/nmac/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var nmacs = de.getElementsByTagName('nmac'); if (nmacs) { var nmac = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < nmacs.length; i++) { var nmacXML = nmacs[i]; var guid = GetGuid(nmacXML); if (false == NmacMarkerAlreadyExists(guid)) { nmac = new Nmac(nmacXML, ''); if (null != nmac) { if(loader) { loader.add(nmac, nmac.show, true); } } // (null != namc) } // (false == NmacMarkerAlreadyExists(guid)) } // for if (loader) { loader.execute(); } } // if (nmacs) else { alert('No nmacs found!'); } } // if (xmldoc) } // function ); } function ShowMACMarkers(b) { var sw = b.getSouthWest(); var ne = b.getNorthEast(); var lat0 = sw.lat(); var lng1 = ne.lng(); var lat1 = ne.lat(); var lng0 = sw.lng(); var qs = "?lat0=" + lat0 + "&lat1=" + lat1 + "&lng0=" + lng0 + "&lng1=" + lng1; var page = '/xml/mac/xml.aspx' + qs; GDownloadUrl(page, function(data, responseCode) { var xmldoc = GXml.parse(data); if (xmldoc) { var de = xmldoc.documentElement; var macs = de.getElementsByTagName('mac'); if (macs) { var mac = null; if (loader) { loader.show('Displaying markers...', true); } for (var i = 0; i < macs.length; i++) { var macXML = macs[i]; var guid = GetGuid(macXML); if (false == MacMarkerAlreadyExists(guid)) { mac = new Mac(macXML, ''); if (null != mac) { if(loader) { loader.add(mac, mac.show, true); } } // (null != amc) } // (false == MacMarkerAlreadyExists(guid)) } // for if (loader) { loader.execute(); } } // if (macs) else { alert('No macs found!'); } } // if (xmldoc) } // function ); } GPolygon.prototype.Contains = function(point) { var j = 0; var oddNodes = false; var x = point.lng(); var y = point.lat(); for (var i=0; i < this.getVertexCount(); i++) { j++; if (j == this.getVertexCount()) { j = 0; } if (((this.getVertex(i).lat() < y) && (this.getVertex(j).lat() >= y)) || ((this.getVertex(j).lat() < y) && (this.getVertex(i).lat() >= y))) { if ( this.getVertex(i).lng() + (y - this.getVertex(i).lat()) / (this.getVertex(j).lat() - this.getVertex(i).lat()) * (this.getVertex(j).lng() - this.getVertex(i).lng()) < x ) { oddNodes = !oddNodes; } } } return oddNodes; } // === A method for testing if a point is inside a polyline // === Add the GPolygon method to GPolyline GPolyline.prototype.Contains = GPolygon.prototype.Contains; GPolyline.prototype.Contains = function(pt) { var bcontains = false; var closeness = 5; var zoom = map.getZoom(); var ptPx = map.fromLatLngToDivPixel(pt); if (this.lltr.points.length > 1 ) { //loop through each points for (var i=1;i < closeness) { var dist2 = Math.pow(dist,2); // minimum distance^2 of pt to infinite line var rl2 = length2(gp1, gp2); // length^2 of line segment var ln2 = length2(gp1, ptPx); // distance^2 of pt to end line segment var lnm12 = length2(gp2, ptPx); // distance^2 of pt to begin line segment var calcrl2 = ln2 - dist2 + lnm12 - dist2; // calculated approximate (but useful) length^2 of line segment; // must be inside line segment if (calcrl2 <= rl2) { //map.openInfoWindowHtml(pt,'Polyline Clicked'); bcontains = true; break; }; //end hit }; // only check if close to infinite line };//end for i };//end if return bcontains; }; //function detectPolyClick function length2(pt1, pt2) { return Math.pow((pt1.y - pt2.y),2) + Math.pow((pt1.x - pt2.x),2); }; // function to find distance (squared) between 2 pixels function distanceToLine(pt1, pt2, pt) { //do extra check for NaN if (pt1.x != pt2.x) { var slope = (pt2.y - pt1.y) / (pt2.x - pt1.x); var intercept = pt2.y - slope * pt2.x; var dist = Math.abs(slope*pt.x + intercept - pt.y) / Math.sqrt(slope*slope+1); } else { var dist = Math.abs(pt.x - pt2.x); // vertical line }; return dist; }; // line defined by pt1,pt2 - distance(px) from pt to line function WheelZoom(a){ if (a.detail) // Firefox { if (a.detail < 0) { map.zoomIn(); }else if (a.detail > 0){ map.zoomOut(); }}else if (a.wheelDelta) // IE { if (a.wheelDelta > 0) { map.zoomIn(); }else if (a.wheelDelta < 0) { map.zoomOut(); } event.cancelBubble = true;}} function AddLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } } AddLoadEvent(LoadMap); function LoadMap() { map = new GMap2(document.getElementById('home')); map.addMapType(G_PHYSICAL_MAP); var currentCenter = map.getCenter(); var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 30)); map.addControl(new GLargeMapControl(), topRight); map.addControl(new GMapTypeControl()); map.addControl(new GOverviewMapControl()); map.addControl(new GScaleControl()); map.setCenter(new GLatLng(38.272, -98.8769)); map.setZoom(4); map.setMapType(G_HYBRID_MAP); var qs = new Querystring(); var code = qs.get('aic'); if (code != null) { //var mb = map.getBounds(); //ShowFacilityMarkers(mb); AutoShowAirport(code); } map.addOverlay(facility_tlo); map.enableContinuousZoom(); map.enableDoubleClickZoom(); // these listeners are to capture the mouse scroll wheel activity GEvent.addDomListener(document.getElementById("home"), "DOMMouseScroll", WheelZoom); // Firefox GEvent.addDomListener(document.getElementById("home"), "mousewheel", WheelZoom); // IE GEvent.addListener(map, "mousemove", // this handles the mouse move function(point) { if (point) { var latLngStr6 = point.y.toFixed(6) + ', ' + point.x.toFixed(6); var intro = 'Current Mouse Position - Latitude/Longitude : '; var dmmp = document.getElementById('mymouseposition'); if (dmmp) { dmmp.innerHTML = intro + latLngStr6; } } }); GEvent.addListener(map, "moveend", // this handles the move end function() { targetMarker = null; //clear target marker reference so checkforpopup does not fire var b = map.getBounds(); var z = map.getZoom(); //Do check to see if really moved if (currentCenter != map.getCenter()) { //alert(b.getSouthWest().lat() + ':' + b.getNorthEast().lat()); var chkFacilities = document.getElementById("chkFacilities").checked; if (chkFacilities==true) { if (z > 5) { ShowFacilityMarkers(b); } else { for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; facility_guids = []; }//end else above zoom level } else { //remove everything if (facility_markers) { for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; facility_guids = []; } }//end if checked var chkMinorAirports = document.getElementById("chkMinorAirports").checked; if (chkMinorAirports==true) { if (z > 8) { ShowMinorAirportMarkers(b); } else { for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; minor_airport_guids = []; }//end else above zoom level } else { //remove everything if (minor_airport_markers) { for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; minor_airport_guids = []; } }//end if checked var chkAirports = document.getElementById("chkAirports").checked; if (chkAirports==true) { if (z > 8) { ShowAirportMarkers(b); } else { for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; airport_guids = []; }//end else above zoom level } else { //remove everything if (airport_markers) { for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; airport_guids = []; } }//end if checked var chkMOAs = document.getElementById("chkMOAs").checked; if (chkMOAs==true) { if (z > 7) { ShowMOAMarkers(b); } else { for (var m = 0; m < moa_markers.length; m++) { map.removeOverlay(moa_markers[m]); } moa_markers = []; moa_guids = []; }//end else above zoom level } else { //remove everything if (moa_markers) { for (var m = 0; m < moa_markers.length; m++) { map.removeOverlay(moa_markers[m]); } moa_markers = []; moa_guids = []; } }//end if checked var chkSUAs = document.getElementById("chkSUAs").checked; if (chkSUAs==true) { if (z > 7) { ShowSUAMarkers(b); } else { for (var m = 0; m < sua_markers.length; m++) { map.removeOverlay(sua_markers[m]); } sua_markers = []; sua_guids = []; }//end else above zoom level } else { //remove everything if (sua_markers) { for (var m = 0; m < sua_markers.length; m++) { map.removeOverlay(sua_markers[m]); } sua_markers = []; sua_guids = []; } }//end if checked var chkMTRs = document.getElementById("chkMTRs").checked; if (chkMTRs==true) { if (z > 7) { ShowLLTRMarkers(b); } else { for (var m = 0; m < lltr_markers.length; m++) { map.removeOverlay(lltr_markers[m]); } lltr_markers = []; lltr_guids = []; }//end else above zoom level } else { //remove everything if (lltr_markers) { for (var m = 0; m < lltr_markers.length; m++) { map.removeOverlay(lltr_markers[m]); } lltr_markers = []; lltr_guids = []; } }//end if checked var chkNMACs = document.getElementById("chkNMACs").checked; if (chkNMACs==true) { if (z > 8) { ShowNMACMarkers(b); } else { for (var m = 0; m < nmac_markers.length; m++) { map.removeOverlay(nmac_markers[m]); } nmac_markers = []; nmac_guids = []; }//end else above zoom level } else { //remove everything if (nmac_markers) { for (var m = 0; m < nmac_markers.length; m++) { map.removeOverlay(nmac_markers[m]); } nmac_markers = []; nmac_guids = []; } }//end if checked var chkMACs = document.getElementById("chkMACs").checked; if (chkMACs==true) { if (z > 8) { ShowMACMarkers(b); } else { for (var m = 0; m < mac_markers.length; m++) { map.removeOverlay(mac_markers[m]); } mac_markers = []; mac_guids = []; }//end else above zoom level } else { //remove everything if (mac_markers) { for (var m = 0; m < mac_markers.length; m++) { map.removeOverlay(mac_markers[m]); } mac_markers = []; mac_guids = []; } }//end if checked currentCenter = map.getCenter(); } //end dupe check } //end function ); GEvent.addListener(map, "zoomend", // this handles the zoomend function(oldlevel,newlevel) { var b = map.getBounds(); var z = map.getZoom(); var chkFacilities = document.getElementById("chkFacilities").checked; if (chkFacilities==true) { if (z > 5) { map.removeOverlay(facility_tlo); ShowFacilityMarkers(b); } else { map.removeOverlay(facility_tlo); map.addOverlay(facility_tlo); for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; facility_guids = []; } } else { if (facility_markers) { for (var m = 0; m < facility_markers.length; m++) { map.removeOverlay(facility_markers[m]); } facility_markers = []; facility_guids = []; } map.removeOverlay(facility_tlo); } var chkAirports = document.getElementById("chkAirports").checked; if (chkAirports==true) { if (z > 8) { map.removeOverlay(airport_tlo); ShowAirportMarkers(b); } else { map.removeOverlay(airport_tlo); map.addOverlay(airport_tlo); for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; airport_guids = []; } } else { if (airport_markers) { for (var m = 0; m < airport_markers.length; m++) { map.removeOverlay(airport_markers[m]); } airport_markers = []; airport_guids = []; } map.removeOverlay(airport_tlo); } var chkMinorAirports = document.getElementById("chkMinorAirports").checked; if (chkMinorAirports==true) { if (z > 8) { map.removeOverlay(minor_airport_tlo); ShowMinorAirportMarkers(b); } else { map.removeOverlay(minor_airport_tlo); map.addOverlay(minor_airport_tlo); for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; minor_airport_guids = []; } } else { if (minor_airport_markers) { for (var m = 0; m < minor_airport_markers.length; m++) { map.removeOverlay(minor_airport_markers[m]); } minor_airport_markers = []; minor_airport_guids = []; } map.removeOverlay(minor_airport_tlo); } var chkMOAs = document.getElementById("chkMOAs").checked; if (chkMOAs==true) { if (z > 7) { map.removeOverlay(moa_tlo); ShowMOAMarkers(b); } else { map.removeOverlay(moa_tlo); map.addOverlay(moa_tlo); for (var m = 0; m < moa_markers.length; m++) { map.removeOverlay(moa_markers[m]); } moa_markers = []; moa_guids = []; } } else { if (moa_markers) { for (var m = 0; m < moa_markers.length; m++) { map.removeOverlay(moa_markers[m]); } moa_markers = []; moa_guids = []; } map.removeOverlay(moa_tlo); } var chkSUAs = document.getElementById("chkSUAs").checked; if (chkSUAs==true) { if (z > 7) { map.removeOverlay(sua_tlo); ShowSUAMarkers(b); } else { map.removeOverlay(sua_tlo); map.addOverlay(sua_tlo); for (var m = 0; m < sua_markers.length; m++) { map.removeOverlay(sua_markers[m]); } sua_markers = []; sua_guids = []; } } else { if (sua_markers) { for (var m = 0; m < sua_markers.length; m++) { map.removeOverlay(sua_markers[m]); } sua_markers = []; sua_guids = []; } map.removeOverlay(sua_tlo); } var chkMTRs = document.getElementById("chkMTRs").checked; if (chkMTRs==true) { if (z > 7) { map.removeOverlay(lltr_tlo); ShowLLTRMarkers(b); } else { map.removeOverlay(lltr_tlo); map.addOverlay(lltr_tlo); for (var m = 0; m < lltr_markers.length; m++) { map.removeOverlay(lltr_markers[m]); } lltr_markers = []; lltr_guids = []; } } else { if (lltr_markers) { for (var m = 0; m < lltr_markers.length; m++) { map.removeOverlay(lltr_markers[m]); } lltr_markers = []; lltr_guids = []; } map.removeOverlay(lltr_tlo); } var chkNMACs = document.getElementById("chkNMACs").checked; if (chkNMACs==true) { if (z > 8) { map.removeOverlay(nmac_tlo); ShowNMACMarkers(b); } else { map.removeOverlay(nmac_tlo); map.addOverlay(nmac_tlo); for (var m = 0; m < nmac_markers.length; m++) { map.removeOverlay(nmac_markers[m]); } nmac_markers = []; nmac_guids = []; } } else { if (nmac_markers) { for (var m = 0; m < nmac_markers.length; m++) { map.removeOverlay(nmac_markers[m]); } nmac_markers = []; nmac_guids = []; } map.removeOverlay(nmac_tlo); } var chkMACs = document.getElementById("chkMACs").checked; if (chkMACs==true) { if (z > 8) { map.removeOverlay(mac_tlo); ShowMACMarkers(b); } else { map.removeOverlay(mac_tlo); map.addOverlay(mac_tlo); for (var m = 0; m < mac_markers.length; m++) { map.removeOverlay(mac_markers[m]); } mac_markers = []; mac_guids = []; } } else { if (mac_markers) { for (var m = 0; m < mac_markers.length; m++) { map.removeOverlay(mac_markers[m]); } mac_markers = []; mac_guids = []; } map.removeOverlay(mac_tlo); } var zs = 'Current Zoom Level: ' + map.getZoom(); var dmz = document.getElementById('myzoomlevel'); if (dmz) { dmz.innerHTML = zs; } } ); GEvent.addListener(map, 'click', function(overlay, pt, point) { if (point) { var info_tabs = new Array(); var hit = false; var html = null; html = '
'; var chkMoa = document.getElementById("chkMOAs").checked; if (chkMoa==true) { //alert( moa_markers.length ); for (var i=0; i < moa_markers.length; i++) { if (moa_markers[i].Contains(point)) { hit = true; html += 'MILITARY OPERATION AREA - ' + moa_markers[i].sua.code + '
'; html += moa_markers[i].sua.loweralt + ' - ' + moa_markers[i].sua.upperalt + ', ' + moa_markers[i].sua.wx +'
'; html += moa_markers[i].sua.efftimes + '
'; html += moa_markers[i].sua.commname + ' ' + moa_markers[i].sua.freq1 + '/' + moa_markers[i].sua.freq2 + '
'; if( moa_markers[i].sua.airspaceStatus == 1 ) html += '
HOT ' + moa_markers[i].sua.startTime + ' - ' + moa_markers[i].sua.endTime + ' Z
' else if( moa_markers[i].sua.airspaceStatus == 2 ) html += '
PENDING ' + moa_markers[i].sua.startTime + ' - ' + moa_markers[i].sua.endTime + ' Z
' else if( moa_markers[i].sua.airspaceStatus == 3 ) html += '
WAITING TO START ' + moa_markers[i].sua.startTime + ' - ' + moa_markers[i].sua.endTime + ' Z
' html += '
' //info_tabs.push(new GInfoWindowTab(moa_markers[i].sua.code, moa_markers[i].sua.code)); } } } var chkSua = document.getElementById("chkSUAs").checked; if (chkSua==true) { for (var i=0; i < sua_markers.length; i++) { if (sua_markers[i].Contains(point)) { hit = true; html += 'SPECIAL USE AIRSPACE - ' + sua_markers[i].sua.code + '
'; html += sua_markers[i].sua.loweralt + ' - ' + sua_markers[i].sua.upperalt + ', ' + sua_markers[i].sua.wx +'
'; html += sua_markers[i].sua.efftimes + '
'; html += sua_markers[i].sua.commname + ' ' + sua_markers[i].sua.freq1 + '/' + sua_markers[i].sua.freq2 + '
'; if( sua_markers[i].sua.airspaceStatus == 1 ) html += '
HOT ' + sua_markers[i].sua.startTime + ' - ' + sua_markers[i].sua.endTime + ' Z
' else if( sua_markers[i].sua.airspaceStatus == 2 ) html += '
PENDING ' + sua_markers[i].sua.startTime + ' - ' + sua_markers[i].sua.endTime + ' Z
' else if( sua_markers[i].sua.airspaceStatus == 3 ) html += '
WAITING TO START ' + sua_markers[i].sua.startTime + ' - ' + sua_markers[i].sua.endTime + ' Z
' html += '
' //info_tabs.push(new GInfoWindowTab(sua_markers[i].sua.code, sua_markers[i].sua.code)); } } } html += '
'; if (hit) { if( map.getInfoWindow() != null ) { if( map.getInfoWindow().getPoint() == point ) hit = false; } if( hit ) map.openInfoWindowHtml(point, html); } } } );GEvent.addListener(map, 'click', function(overlay, pt, point) { //alert ('polyline' ); if (point) { var hit = false; var html = null; var infoTabs = []; var codes = []; //********************************************************* //We must prototype the array.indexOf function here for IE browsers //This prototype is provided by the Mozilla foundation and//is distributed under the MIT license.//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from): Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; } //********************************************************* //alert( lltr_markers.length ); for (var i=0; i < lltr_markers.length; i++) { if (lltr_markers[i].Contains(point) ) { hit = true; html = '
'; html += 'MILITARY LOW ALTITUDE TRAINING ROUTE - ' + lltr_markers[i].lltr.code + '
'; html += 'Owner - ' + lltr_markers[i].lltr.owner + '
'; html += 'Effective: ' + lltr_markers[i].lltr.efftimes + '
'; html += 'Route width - Up to ' + lltr_markers[i].lltr.maxwidth + ' NM
'; if (lltr_markers[i].lltr.aglaltitude != null && lltr_markers[i].lltr.aglaltitude != '') { html += 'Route varies ' + lltr_markers[i].lltr.aglaltitude + ' '; if (lltr_markers[i].lltr.mslaltitude != null && lltr_markers[i].lltr.mslaltitude != '' && lltr_markers[i].lltr.mslaltitude.indexOf('MSL') > -1) { html += '(' + lltr_markers[i].lltr.mslaltitude + ')
'; } } else { if (lltr_markers[i].lltr.mslaltitude != null && lltr_markers[i].lltr.mslaltitude != '') { html += 'Route varies ' + lltr_markers[i].lltr.mslaltitude + '
'; } } //check to see if lltr images are available if (lltr_markers[i].lltr.lltrimagesXMLElements != null && lltr_markers[i].lltr.lltrimagesXMLElements.length > 0) { html += '

Low-Level Training Route Maps
'; for(var l=0;l'; } } html += '
'; //check to see if it's in the codes array already to prevent multiple tabs of same item if (codes != null && codes.indexOf(lltr_markers[i].lltr.code) == -1) { infoTabs.push(new GInfoWindowTab(lltr_markers[i].lltr.code, html)); //add to the hit array codes.push(lltr_markers[i].lltr.code); } } } /* if (hit==true) { map.openInfoWindowTabsHtml(point, infoTabs); } */ if( hit ) { if( map.getInfoWindow() != null ) { if( map.getInfoWindow().getPoint() == point ) hit = false; } if( hit ) map.openInfoWindowHtml(point, html); } } } ); var ele_loading = document.getElementById('loading'); var ele_loading_text = document.getElementById('loadingtext'); var ele_bar = document.getElementById('bar'); var ele_fill = document.getElementById('fill'); var ele_loading_button = document.getElementById('loadingbutton'); loader = new MLoader(map, ele_loading, ele_loading_text, ele_bar, ele_fill, ele_loading_button); var zs = 'Current Zoom Level: ' + map.getZoom(); var dmz = document.getElementById('myzoomlevel'); if (dmz) { dmz.innerHTML = zs; } }