﻿
function tryLocate() {
    var location_lat = dnn.dom.getCookie("Standort.lat");
    var location_lng = dnn.dom.getCookie("Standort.lng");
    var location_adr = dnn.dom.getCookie("Standort.adr");

    if (location_lat != null && location_lng != null && location_adr != null) {
        hibernateLocation(location_lat, location_lng, location_adr);
    } else {
        if (google && google.loader && google.loader.ClientLocation) {
            if (google.loader.ClientLocation.latitude && google.loader.ClientLocation.longitude) {
                var p = google.loader.ClientLocation;
                p.coords = { latitude: p.latitude, longitude: p.longitude };
                successCallback(p);
            } else { errorCallback({ code: 1, message: "No latitude and longitude found." }); }
        } else {
            //alert("google.loader.ClientLocation failed");
            var p = { coords: { latitude: aUserGeoCoords.lat, longitude: aUserGeoCoords.lng  } };
            successCallback(p);
        }
        if (navigator.geolocation !== undefined) { navigator.geolocation.getCurrentPosition(successCallback, errorCallback); }
    }
}

function hibernateLocation(lat, lng, adress) {
    aUserGeoCoords = { lat: lat, lng: lng };
    try {
        // save
        dnn.dom.setCookie("Standort.lat", lat, 10, "/");
        dnn.dom.setCookie("Standort.lng", lng, 10, "/");
        dnn.dom.setCookie("Standort.adr", adress, 10, "/");
        // get data
        AsyncLookup(lat, lng);
    } catch (e) {
        //alert(e);
    }
}

function successCallback(p) {
    aUserGeoCoords = { lat: p.coords.latitude, lng: p.coords.longitude };
    try {
        dnn.dom.setCookie("Standort.lat", p.coords.latitude, 10, "/");
        dnn.dom.setCookie("Standort.lng", p.coords.longitude, 10, "/");
        dnn.dom.setCookie("Standort.adr", p.address.city, 10, "/");
        AsyncLookup(p.coords.latitude, p.coords.longitude);

        if (p.address) {
            if (p.address.city) {
                cityCallback(p.address.city);
            }
        }
        
    } catch (e) {
        //alert(e); 
    }
}

function cityCallback(city) {
    var radAdressBox = $(radAdress + "_Input")
    if (radAdressBox != null) {
        radAdressBox.value = city;
    } else {
        $find(radAdress).set_text(city);
        $find(radAdress).set_value(city);
    }
    
    //    //HtmlEncode Trick
    //    var div = document.createElement('div');
    //    var text = document.createTextNode(city);
    //    div.appendChild(text);
    //    city = div.innerHTML;
    //    dnn.dom.setCookie("Standort.adr", city, null, "/");

    //    dnn.dom.setCookie("Standort.adr", htmlEncode(city, false, null), null, "/");

    dnn.dom.setCookie("Standort.adr", city, 10, "/");    
}

function errorCallback(err, msg) {
    switch (err.code) {
        case 0:
            msg = "Unknown error!" + msg;
            break;
        case 1:
            msg = "Permission denied." + msg;
            break;
        case 2:
            msg = "Your position could not be determined." + msg;
            break;
        case 3:
            msg = "Timeout.";
            break;
        default:
            msg = "Unknown error!" + msg;
    }
    if (err.message) {
        msg += " <" + err.message + ">";
    }
    $("#map_canvas").text(msg).css({ color: "red" });
}
