﻿var latsign = 1;
var lonsign = 1;
var absdlat = 0;
var absdlon = 0;
var absmlat = 0;
var absmlon = 0;
var absslat = 0;
var absslon = 0;

function LTrim(value) {

    var re = /\s*((\S+\s*)*)/;
    return value.replace(re, "$1");

}
function RTrim(value) {

    var re = /((\s*\S+)*)\s*/;
    return value.replace(re, "$1");

}
function trim(value) {

    return LTrim(RTrim(value));

}

function frac(x, n) {
    var power = Math.pow(10, n);
    return (Math.round(power * x) / power);
}

function getWgsDegrees(decimalLong) {
    var lonMin = (decimalLong - Math.floor(decimalLong)) * 60;
    var lonSec = (lonMin - Math.floor(lonMin)) * 60;
    return Math.floor(decimalLong) + '° ' + Math.floor(lonMin) + '\' ' + Math.floor(lonSec) + '\"';
}

function getWgsDegreesLat(decimalLat) {
    var latMin = (decimalLat - Math.floor(decimalLat)) * 60;
    var latSec = (latMin - Math.floor(latMin)) * 60;
    return Math.floor(decimalLat) + '° ' + Math.floor(latMin) + '\' ' + Math.floor(latSec) + '\"';
}

function getWgsMinutes(decimalLong) {
    var lonDeg = Math.floor(decimalLong);
    var lonMin = frac(((decimalLong - Math.floor(decimalLong)) * 60), 3);
    return lonDeg + '° ' + lonMin + '\'';
}

function getWgsMinutesLat(decimalLat) {
    var latDeg = Math.floor(decimalLat);
    var latMin = frac(((decimalLat - Math.floor(decimalLat)) * 60), 3);
    return latDeg + '° ' + latMin + '\'';
}

function MinDegreeToDecLong(value) {
    var degSign = value.indexOf('°');
    var dlong = parseFloat(value.substring(0, degSign));

    var mlon = parseFloat(value.substr(degSign + 1));

    var lon = (dlong + (mlon / 60));

    return frac(lon, 6);
}

function MinDegreeToDecLat(value) {
    var degSign = value.indexOf('°');
    var dlat = parseFloat(value.substring(0, degSign));

    var mlat = parseFloat(value.substr(degSign + 1));

    var lat = (dlat + (mlat / 60));

    return frac(lat, 6);
}

function DegToDecLong(value) {

    var degSign = value.indexOf('°');

    var dlong = parseFloat(value.substring(0, degSign));
    if (dlong < 0) { lonsign = -1; }
    absdlon = Math.abs(Math.round(dlong * 1000000.));

    if (absdlon > (180 * 1000000)) {
        alert(' Felaktigt värde ');
    }

    value = trim(value.substr(degSign + 1));
    var minSign = value.indexOf('\'');
    var mlong = parseFloat(value.substring(0, minSign));

    mlong = Math.abs(Math.round(mlong * 1000000.) / 1000000);
    absmlon = Math.abs(Math.round(mlong * 1000000));

    if (absmlon >= (60 * 1000000)) {
        alert(' Felaktigt värde ');
    }

    var slon = parseFloat(value.substr(minSign + 1).replace(",","."));
    slon = Math.abs(Math.round(slon * 1000000.) / 1000000);
    absslon = Math.abs(Math.round(slon * 1000000.));
    if (absslon > (59.99999999 * 1000000)) {
        alert(' Felaktigt värde ');
    }

    var retval = Math.round(absdlon + (absmlon / 60) + (absslon / 3600)) * lonsign / 1000000;

    return retval;

}

function DegToDecLat(value) {

    var degSign = value.indexOf('°');

    var dlat = parseFloat(value.substring(0, degSign));
    if (dlat < 0) { latsign = -1; }
    absdlat = Math.abs(Math.round(dlat * 1000000.));

    if (absdlat > (90 * 1000000)) {
        alert(' Felaktigt värde ');
    }

    value = trim(value.substr(degSign + 1));
    var minSign = value.indexOf('\'');
    var mlat = parseFloat(value.substring(0, minSign));

    mlat = Math.abs(Math.round(mlat * 1000000.) / 1000000);
    absmlat = Math.abs(Math.round(mlat * 1000000.));

    if (absmlat >= (60 * 1000000)) {
        alert(' Felaktigt värde ');
    }

    var slat = parseFloat(value.substr(minSign + 1).replace(",","."));
    slat = Math.abs(Math.round(slat * 1000000.) / 1000000);
    absslat = Math.abs(Math.round(slat * 1000000.));
    if (absslat > (59.99999999 * 1000000)) {
        alert(' Felaktigt värde ');
    }

    var retval = Math.round(absdlat + (absmlat / 60) + (absslat / 3600)) * latsign / 1000000;

    return retval;

}