// Some internal state vars var dfMapMapObj = ''; var dfMapMarker = ''; var dfMapResponse = ''; var dfMapPlacemarkNo = ''; var dfMapZoomLevel = ''; var dfMapMetaObj = ''; var dragged = false; // Display users current position on map if browser supports geolocation object function displayCurrentPosition() { /*if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { document.getElementById("dfMapAddress").value = position.coords.latitude + ',' + position.coords.longitude; dfMapReset(); } ) }*/ } // Process returned data function getLocationsResponse(response) { setLoadingState(false); // Internal api error if (response && (response.Status.code == G_GEO_SERVER_ERROR || response.Status.code == G_GEO_BAD_KEY || response.Status.code == G_GEO_TOO_MANY_QUERIES)) { alert("An internal error occured, please try again later!"); // Successfuly reply } else if (response && (response.Status.code == G_GEO_SUCCESS)) { dfMapResponse = response; // Check if there are more multiple results if (response.Placemark.length > 1 ) { // Display input layer document.body.style.overflow = 'hidden'; document.getElementById('inputScreenContent').innerHTML = ''; document.getElementById('inputScreenBG').style.visibility = 'visible'; document.getElementById('inputScreenBG').style.display = 'block'; document.getElementById('inputScreen').style.visibility = 'visible'; document.getElementById('inputScreen').style.display = 'block'; // Write down possible locations for (var i = 0; i < response.Placemark.length; i++) { var placemark = response.Placemark[i]; var address = ''; var country = ''; var administrativeArea = ''; var subAdministrativeArea = ''; var locality = ''; var dependentLocality= ''; if (response && placemark) { address = placemark.address; if (placemark.AddressDetails.Country) { country = placemark.AddressDetails.Country.CountryNameCode; if (placemark.AddressDetails.Country.AdministrativeArea) { administrativeArea = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) { subAdministrativeArea = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) { locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality) { dependentLocality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.DependentLocalityName; } } } } } } document.getElementById('inputScreenContent').innerHTML += '
'; } // Just draw the result if there was only one } else { dfMapPlacemarkNo = 0; dfMapDrawPlacemark(); } // Location not found } else { alert("The requested address could not be found!"); } } // Draw placemark function dfMapDrawPlacemark() { // Hide input layer if it has been on display document.getElementById('inputScreen').style.visibility = 'hidden'; document.getElementById('inputScreen').style.display = 'none'; document.getElementById('inputScreenBG').style.visibility = 'hidden'; document.getElementById('inputScreenBG').style.display = 'none'; document.body.style.overflow = 'auto'; // Get location data var placemark = dfMapResponse.Placemark[dfMapPlacemarkNo]; var point = new GLatLng(placemark.Point.coordinates[1], placemark.Point.coordinates[0]); // Center map dfMapMapObj.setCenter(point, 14, G_NORMAL_MAP); // Add marker to map dfMapMarker = new GMarker(point, {draggable: true}); GEvent.addListener(dfMapMarker, "click", function() { dfMapFillMarker(); }, this); GEvent.addListener(dfMapMarker, "dragend", function() { dragged = true; dfMapFillMarker(); }, this); dfMapMapObj.addOverlay(dfMapMarker); dfMapFillMarker(); } // Returns a points rounded latitude function dfMapGetPointLat(point) { var accuracy = document.getElementById('dfMapAccuracy').options[document.getElementById('dfMapAccuracy').selectedIndex].value; var value = point.lat(); return dfMapGeoAccuracy(value, accuracy); } // Returns a points rounded longitude function dfMapGetPointLng(point) { var accuracy = document.getElementById('dfMapAccuracy').options[document.getElementById('dfMapAccuracy').selectedIndex].value; var value = point.lng(); return dfMapGeoAccuracy(value, accuracy); } // Round a lng/lat value function dfMapGeoAccuracy(value, accuracy) { return value.toFixed(accuracy); } // Calculates a degree value function dfMapPosToDegree(position, type) { var result = ''; var degree = Math.floor(Math.abs(position)); var minutes = Math.floor((Math.abs(position) - degree) * 60); var seconds = (((Math.abs(position) - degree) * 60 - minutes) * 60).toFixed(2); var extension; if (type == 'lat') { if (position > 0 ) { extension = 'N'; } else { extension = 'S'; } } else { if (position > 0 ) { extension = 'O'; } else { extension = 'W'; } } return degree + '° ' + minutes + '\' ' + seconds + '\'\' ' + extension; } // Draw address position and zoom in there function dfMapFillMarker() { // Abort if no response so far if (!dfMapResponse) { return; } var placemark = dfMapResponse.Placemark[dfMapPlacemarkNo]; var accuracy = '?'; var address = ''; var country = ''; var administrativeArea = ''; var subAdministrativeArea = ''; var locality = ''; var thoroughfare = ''; var postalCode = ''; var dependentLocality = ''; var dependentLocalityThoroughfare = ''; var dependentLocalityPostalCode = ''; var GGeoAddressAccuracy = new Array( 'Unknown', 'Country level', 'Region level', 'Sub-region level', 'Town level', 'Post code level', 'Street level', 'Intersection level', 'Adress level' ); // Get placemark data if (placemark && !dfMapMetaObj && !isGeoCoord(getAddress())) { address = placemark.address; if (placemark.AddressDetails.Country) { country = placemark.AddressDetails.Country.CountryNameCode; accuracy = placemark.AddressDetails.Accuracy; if (placemark.AddressDetails.Country.AdministrativeArea) { administrativeArea = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) { subAdministrativeArea = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) { locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare) { thoroughfare = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName; } if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode) { postalCode = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber; } if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality) { dependentLocality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.DependentLocalityName; if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.Thoroughfare) { thoroughfare = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.Thoroughfare.ThoroughfareName; } if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.PostalCode) { postalCode = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.PostalCode.PostalCodeNumber; } } } } } } } // Zoom in only if not dragged since last result if (!dragged) { var zoomLevel = 10; if (dfMapZoomLevel > 0) { zoomLevel = dfMapZoomLevel; } else if (accuracy == 0) { zoomLevel = 0; } else if (accuracy == 1) { zoomLevel = 3; } else if (accuracy == 2) { zoomLevel = 6; } else if (accuracy == 3) { zoomLevel = 8; } else if (accuracy == 4) { zoomLevel = 12; } else if (accuracy == 5) { zoomLevel = 13; } else if (accuracy == 6) { zoomLevel = 15; } else if (accuracy == 7) { zoomLevel = 16; } else if (accuracy == 8) { zoomLevel = 17; } dfMapMapObj.setZoom(zoomLevel); } var thisAddress = (dfMapMetaObj ? dfMapMetaObj.geoPlacename : (address ? address : getAddress())); var thisRegion = (dfMapMetaObj ? dfMapMetaObj.geoRegion : (country && administrativeArea ? country + '-' + administrativeArea : '')); var lng = dfMapGetPointLng(dfMapMarker.getPoint()); var lat = dfMapGetPointLat(dfMapMarker.getPoint()); var lngDeg = dfMapPosToDegree(lng, 'lng'); var latDeg = dfMapPosToDegree(lat, 'lat'); var zoomLevel = dfMapMapObj.getZoom(); var mapType = ''; // Fill marker dfMapMarker.openInfoWindowHtml('Latitude: ' + lat + ' (' + latDeg + ')
Longitude: ' + lng + ' (' + lngDeg + ')
Drag marker or click map to modify position!
'); // Fill geo-data document.getElementById('dfMapGeoDatasheet').innerHTML = '

Address:' + thisAddress + '
Latitude:' + lat + ' (' + latDeg + ')
Longitude:' + lng + ' (' + lngDeg + ')
 
Country:' + country + '
Administrative Area:' + administrativeArea + '
Sub-Administrative Area:' + subAdministrativeArea + '
Locality:' + locality + '
Thoroughfare:' + thoroughfare + '
Postal code:' + postalCode + '
Locality:' + dependentLocality + '
Thoroughfare:' + dependentLocalityThoroughfare + '
Postal code:' + dependentLocalityPostalCode + '
Accuracy:' + GGeoAddressAccuracy[accuracy] + ' (' + accuracy + ' out of 8)

'; // Fill geo-metatags document.getElementById('dfMapGeoMetatags').value = '' + "\n" + '' + "\n" + '' + "\n" + ''; // Fill geo-tags document.getElementById('dfMapGeoTags').value = "geotagged\ngeo:lat=" + lat + "\ngeo:lon=" + lng; // Fill kml document.getElementById('dfMapKml').value = "<\?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n\n \n " + thisAddress + "\n \n \n " + lng + "," + lat + ",0\n \n \n"; // Fill kml download document.getElementById('dfMapKmlDownload').innerHTML = ''; // Fill link document.getElementById('dfMapLink').value = 'http://mygeoposition.com/loc/' + (dragged ? lat + ',' + lng : thisAddress) + '/?zoomLevel=' + zoomLevel + '&mapType=' + mapType; document.getElementById('dfMapLinkGoogleMaps').value = 'http://maps.google.com/?q=' + lat + ',' + lng; document.getElementById('dfMapLinkBingMaps').value = 'http://www.bing.com/maps/?lvl=14&cp=' + lat + '~' + lng; document.getElementById('dfMapLinkYahoo').value = 'http://maps.yahoo.com/#q1=' + thisAddress + '&mag=6&lon=' + lng + '&lat=' + lat; document.getElementById('dfMapLinkOpenStreetMap').value = 'http://www.openstreetmap.org/?lat=' + lat + '&lon=' + lng + '&zoom=13'; } // Zoom function dfMapZoom(zoomModification) { dfMapMapObj.setZoom(dfMapMapObj.getZoom() + zoomModification); } // Map type function dfMapType(mapType) { dfMapMapObj.setMapType(mapType); document.getElementById('dfMapButtonTypeMapNormal').style.fontWeight = 'normal'; document.getElementById('dfMapButtonTypeMapSatellite').style.fontWeight = 'normal'; document.getElementById('dfMapButtonTypeMapHybrid').style.fontWeight = 'normal'; if (mapType == G_NORMAL_MAP) { document.getElementById('dfMapButtonTypeMapNormal').style.fontWeight = 'bold'; } else if (mapType == G_SATELLITE_MAP) { document.getElementById('dfMapButtonTypeMapSatellite').style.fontWeight = 'bold'; } else if (mapType == G_HYBRID_MAP) { document.getElementById('dfMapButtonTypeMapHybrid').style.fontWeight = 'bold'; } } // Validate url function isUrl(url) { var urlPattern = /^(?:(?:ftp|https?):\/\/)?(?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\.)+(?:com|edu|biz|org|gov|int|info|mil|net|name|museum|coop|aero|[a-z][a-z])\b(?:\d+)?(?:\/[^;"'<>()\[\]{}\s\x7f-\xff]*(?:[.,?]+[^;"'<>()\[\]{}\s\x7f-\xff]+)*)?/; return urlPattern.test(url.toLowerCase()); } // Validate url function geoCoordPrecision(string) { var match = string.match(/\.([0-9]*)/g); var result = 0; if (match) { for(var i = 0; i result) { result = match[i].length; } } } if (result > 0) { result--; } return result; } // Validate url function isGeoCoord(string) { var stringPattern = /^[+\-]{0,1}[0-9]{1,3}(\.[0-9]*)?[\, ][ ]*[+\-]{0,1}[0-9]{1,3}(\.[0-9]*)?$/; return stringPattern.test(string); } // Lookup function lookup() { if (document.getElementById('dfMapAddress').value == 'London, United Kingdom / 51.5,-0.1 / filzhut.de') { return; } var xmlHttpReq = false; var self = this; // Mozilla/Safari if (window.XMLHttpRequest) { self.xmlHttpReq = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } self.xmlHttpReq.open('GET', '/lookup.php?q=' + getAddress(), true); self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); self.xmlHttpReq.send(''); } // Load geodata from url function loadGeoFromUrl() { var xmlHttpReq = false; var self = this; // Mozilla/Safari if (window.XMLHttpRequest) { self.xmlHttpReq = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } self.xmlHttpReq.open('GET', 'geofromurl.php?url=' + getAddress(), true); self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); self.xmlHttpReq.onreadystatechange = function() { if (self.xmlHttpReq.readyState == 4) { setLoadingState(false); if (self.xmlHttpReq.status == 200 && self.xmlHttpReq.responseText) { var metaObj = eval("(" + self.xmlHttpReq.responseText + ")"); var pos = (metaObj.geoPosition ? metaObj.geoPosition : (metaObj.icbm ? metaObj.icbm : '')); pos = pos.replace(/;/g, ','); lookup(); setAddress(pos); dfMapReset(metaObj); } else { alert("The requested web address could not be found,\nthe page contains no geotags."); } } } setLoadingState(true); self.xmlHttpReq.send(''); } // Remove search field placeholder function focusSearchField(id) { if(document.getElementById(id).value == "London, United Kingdom / 51.5,-0.1 / filzhut.de") { document.getElementById(id).style.color = "rgb(0, 0, 0)"; document.getElementById(id).value = ""; } } // Restore search field placeholder function blurSearchField(id) { if(document.getElementById(id).value == "" || document.getElementById(id).value == "London, United Kingdom / 51.5,-0.1 / filzhut.de") { document.getElementById(id).style.color = "rgb(150, 150, 150)"; document.getElementById(id).value = "London, United Kingdom / 51.5,-0.1 / filzhut.de"; } } // Loading state function setLoadingState(state) { if (state) { document.body.style.cursor = 'wait'; document.body.style.overflow = 'hidden'; //document.getElementById('loadingScreenBG').style.visibility = 'visible'; //document.getElementById('loadingScreenBG').style.display = 'block'; document.getElementById('loadingScreen').style.visibility = 'visible'; document.getElementById('loadingScreen').style.display = 'block'; } else { document.body.style.cursor = 'default'; document.getElementById('loadingScreen').style.visibility = 'hidden'; document.getElementById('loadingScreen').style.display = 'none'; //document.getElementById('loadingScreenBG').style.visibility = 'hidden'; //document.getElementById('loadingScreenBG').style.display = 'none'; } } // Copy textarea contents to clipboard function copyToClipboard(textareaId){ var copied = document.getElementById(textareaId).createTextRange(); copied.execCommand("Copy"); } // Display copy button function displayCopyButton(elementId, ps) { if ( (navigator.appName=="Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) { document.write((ps ? '

' : '') + "" + (ps ? '

' : '')); } } // Dump a var or object function dump(arr,level) { var dumped_text = ""; if(!level) level = 0; //The padding given at the beginning of the line. var level_padding = ""; for(var j=0;j \"" + value + "\"\n"; } } } else { //Stings/Chars/Numbers etc. dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; } return dumped_text; } // Get address function getAddress() { if (document.getElementById('dfMapAddress').value == 'London, United Kingdom / 51.5,-0.1 / filzhut.de') { return 'London, United Kingdom'; } else { return document.getElementById('dfMapAddress').value; } } // Set address function setAddress(string) { document.getElementById('dfMapAddress').value = string; } // Start application and query function dfMapReset(metaObj) { dfMapMapObj.clearOverlays(); dfMapMarker = ''; dfMapResponse = ''; dfMapPlacemarkNo = 0; dfMapZoomLevel = ''; dfMapMetaObj = (metaObj ? metaObj : ''); dragged = false; if (isGeoCoord(getAddress())) { var precision = geoCoordPrecision(getAddress()); var zoomLevel; if (precision >= 3) { zoomLevel = 17; } else if (precision == 2) { zoomLevel = 14; } else if (precision == 1) { zoomLevel = 11; } else { zoomLevel = 8; } dfMapZoomLevel = zoomLevel; } if (isUrl(getAddress())) { loadGeoFromUrl(); } else { var dfMapGeocoder = new GClientGeocoder(); setLoadingState(true); dfMapGeocoder.getLocations(getAddress(), getLocationsResponse); lookup(); } if ( (document.getElementById("tabAbout") && document.getElementById("tabAbout").getAttribute("class") && document.getElementById("tabAbout").getAttribute("class").search(/tabbertabhide/) == -1) || (document.getElementById("tabAbout") && document.getElementById("tabAbout").getAttribute("className") && document.getElementById("tabAbout").getAttribute("className").search(/tabbertabhide/) == -1) || (document.getElementById("tabLanguages") && document.getElementById("tabLanguages").getAttribute("class") && document.getElementById("tabLanguages").getAttribute("class").search(/tabbertabhide/) == -1) || (document.getElementById("tabLanguages") && document.getElementById("tabLanguages").getAttribute("className") && document.getElementById("tabLanguages").getAttribute("className").search(/tabbertabhide/) == -1) || (document.getElementById("tabImprint") && document.getElementById("tabImprint").getAttribute("class") && document.getElementById("tabImprint").getAttribute("class").search(/tabbertabhide/) == -1) || (document.getElementById("tabImprint") && document.getElementById("tabImprint").getAttribute("className") && document.getElementById("tabImprint").getAttribute("className").search(/tabbertabhide/) == -1) ) { document.getElementById("tabberRoot").tabber.tabShow(1); } } // Declare map function loadApplication() { dfMapMapObj = new GMap2(document.getElementById("dfMapMap")); dfMapMapObj.disableDoubleClickZoom(); dfMapMapObj.enableScrollWheelZoom(); dfMapMapObj.enableContinuousZoom(); GEvent.addListener(dfMapMapObj, "click", function(overlay, point) { if (point) { dragged = true; dfMapMarker.setPoint(point); dfMapFillMarker(); } }, this); // Add controls to map dfMapMapObj.addControl(new GLargeMapControl()); dfMapMapObj.addControl(new GMapTypeControl()); dfMapMapObj.addControl(new GScaleControl()); blurSearchField('dfMapAddress'); // Finally start geocoding dfMapReset(); }