  var map = new GMap2(document.getElementById("map"), {mapTypes: [G_HYBRID_MAP, G_NORMAL_MAP, G_SATELLITE_3D_MAP]});

    function CheckSelection() {
        for (i = 0; i < document.result.selection.length; ++i) {
            if (document.result.selection.options[i].selected == true) {
                document.getElementById("search").value = document.result.selection.options[i].value;
            }
        }
    }


    function load() {
        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map"), {mapTypes: [G_HYBRID_MAP, G_NORMAL_MAP, G_SATELLITE_3D_MAP]});
            geo = new GClientGeocoder;
            map.addControl(new GLargeMapControl);
            map.addControl(new GMapTypeControl);
            map.setCenter(new GLatLng(document.getElementById("center_lat").value, document.getElementById("center_lng").value), 11);
            var point = new GLatLng(document.getElementById("point_lat").value, document.getElementById("point_lng").value);
            var marker = new GMarker(point, {draggable: true});
            map.addOverlay(marker);
            GEvent.addListener(map, "click", function (overlay, point) {map.clearOverlays();if (point) {map.addOverlay(new GMarker(point));map.panTo(point);document.getElementById("lat").value = point.lat();document.getElementById("long").value = point.lng();geoUpdate();}});
        } else {
            alert("Sorry, the Google Maps API is not compatible with this browser");
        }
        document.getElementById("form1div").style.visibility = "visible";
    }


    function showAddress() {
        var search = document.getElementById("search").value;
        document.getElementById("message").innerHTML = "";
        geo.getLocations(search, function (result) {if (result.Status.code == G_GEO_SUCCESS) {if (result.Placemark.length > 1) {document.getElementById("message").innerHTML = result.Placemark.length + " results found. Please choose one.";txt = "<form action=\"\" name=\"result\"><select name=\"selection\" size=\"1\" onchange=\"CheckSelection()\">";}map.clearOverlays();for (var i = 0; i < result.Placemark.length; i++) {var p = result.Placemark[i].Point.coordinates;var marker = new GMarker(new GLatLng(p[1], p[0]));if (result.Placemark.length > 1) {txt += "<option value=\"" + result.Placemark[i].address + "\">" + result.Placemark[i].address + "</option>";}map.addOverlay(marker);}if (result.Placemark.length > 1) {txt += "</select></form><br/>";document.getElementById("message").innerHTML += txt;document.getElementById("search").value = result.Placemark[0].address;}var p = result.Placemark[0].Point.coordinates;map.setCenter(new GLatLng(p[1], p[0]), 11);document.getElementById("lat").value = p[1];document.getElementById("long").value = p[0];geoUpdate();} else {var reasons = [];reasons[G_GEO_SUCCESS] = "Success";reasons[G_GEO_MISSING_ADDRESS] = "Missing Address: The address was either missing or had no value.";reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address:  No corresponding geographic location could be found for the specified address.";reasons[G_GEO_UNAVAILABLE_ADDRESS] = "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";reasons[G_GEO_BAD_KEY] = "Bad Key: The API key is either invalid or does not match the domain for which it was given";reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";reasons[G_GEO_SERVER_ERROR] = "Server error: The geocoding request could not be successfully processed.";var reason = "Code " + result.Status.code;if (reasons[result.Status.code]) {reason = reasons[result.Status.code];}document.getElementById("message").innerHTML = "<div class=\"error\" style=\"border: #a52a2a 1px aolid;\"><font style=\"size: 2; color: #a52a2a;\"><span><strong>Could not found address \"" + search + "\" <br/>" + reason + "</strong></span></font></div>";}});
    }


    function geoUpdate() {
        getInfoTZ();
        getInfoCountry();
    }


    function serveInfoTZ(jData) {
        if (jData == null) {
            return;
        }
        if (jData.rawOffset != undefined) {
            document.getElementById("tz").value = jData.rawOffset;
            document.getElementById("offset").value = jData.dstOffset;
        } else {
            document.getElementById("tz").value = "0";
            document.getElementById("offset").value = "0";
        }
        return;
    }


    function getInfoTZ() {
        var request = "http://ws.geonames.org/timezoneJSON?lang=en&lat=" + document.getElementById("lat").value + "&lng=" + document.getElementById("long").value + "&callback=serveInfoTZ";
        var aObj = new JSONscriptRequest(request);
        aObj.buildScriptTag();
        aObj.addScriptTag();
    }


    function serveInfoCountry(jData) {
        if (jData == null) {
            return;
        }
        var locTxt = "";
        if (jData.countryName != undefined) {
            locTxt = locTxt + jData.countryName;
        }
        if (jData.adminName1 != undefined) {
            locTxt = locTxt + ", " + jData.adminName1;
        }
        if (jData.countryName == undefined && jData.adminName1 == undefined) {
            locTxt = "Irgendwo";
        }
        document.getElementById("loc").value = locTxt;
        return;
    }


    function getInfoCountry() {
        var request = "http://ws.geonames.org/countrySubdivisionJSON?lang=en&maxRows=1&radius=100&lat=" + document.getElementById("lat").value + "&lng=" + document.getElementById("long").value + "&callback=serveInfoCountry";
        var aObj = new JSONscriptRequest(request);
        aObj.buildScriptTag();
        aObj.addScriptTag();
    }



    function checkFloat(item, min, max, tmpMsgText, lCode) {
        var checkVal = parseFloat(SearchAndReplace(item.value, ",", "."));
        var returnVal = false;
        var tmpMsg = "";
        var aText0 = "Please enter a number";
        var aText1 = "Please enter a number";
        var aText2 = "Please enter a number >= " + min;
        var aText3 = "Please enter a number <= " + max;
        if (lCode == 1) {
            aText0 = "Bitte geben Sie eine Zahl ein.";
            aText1 = "Bitte geben Sie eine Zahl ein.";
            aText2 = "Bitte geben Sie eine Zahl >= " + min + " ein.";
            aText3 = "Bitte geben Sie eine Zahl <= " + max + " ein.";
        }
        if (item.value == "") {
            item.focus();
            tmpMsg = aText0;
        } else if (isNaN(SearchAndReplace(item.value, ",", "."))) {
            item.focus();
            tmpMsg = aText1;
        } else if (checkVal < min) {
            item.focus();
            tmpMsg = aText2;
        } else if (checkVal > max) {
            item.focus();
            tmpMsg = aText3;
        } else {
            returnVal = true;
            return returnVal;
        }
        if (item == document.getElementById("lat")) {
            errLat += tmpMsg;
        } else if (item == document.getElementById("long")) {
            errLong += tmpMsg;
        } else if (item == document.getElementById("tz")) {
            errTZ += tmpMsg;
        } else if (item == document.getElementById("offset")) {
            errDT += tmpMsg;
        }
        return returnVal;
    }


    function SearchAndReplace(sSrc, sOld, sNew) {
        if (sSrc == null || sOld == null) {
            return null;
        }
        if (sSrc.length == 0 || sOld.length == 0) {
            return sSrc;
        }
        if (sNew == null || sNew.length == 0) {
            sNew = "";
        }
        var lengthsOld = sOld.length;
        var lengthsNew = sNew.length;
        var Pos = sSrc.indexOf(sOld, 0);
        while (Pos >= 0) {
            sSrc = sSrc.substring(0, Pos) + sNew + sSrc.substring(Pos + lengthsOld);
            Pos = sSrc.indexOf(sOld, Pos + lengthsNew);
        }
        return sSrc;
    }


    function updateMap() {
        if (CheckForm()) {
            map.clearOverlays();
            map.setCenter(new GLatLng(document.getElementById("lat").value, document.getElementById("long").value), 11);
            var point = new GLatLng(document.getElementById("lat").value, document.getElementById("long").value);
            var marker = new GMarker(point, {draggable: true});
            map.addOverlay(marker);
            geoUpdate();
        }
    }
