var LatLngSwitch = function (parent) {
    this.Parent = parent;

    this.Startup = function () {
        $('#first-lng-copy-btn').on('click', this.OnFirstLngCopyClick.bind(this));
        $('#first-lat-copy-btn').on('click', this.OnFirstLatCopyClick.bind(this));
        $('#second-lng-copy-btn').on('click', this.OnSecondLngCopyClick.bind(this));
        $('#second-lat-copy-btn').on('click', this.OnSecondLatCopyClick.bind(this));
        $('#first-lng-switch-btn').on('click', this.onFirstLngSwitchClick.bind(this));
        $('#first-lat-switch-btn').on('click', this.onFirstLatSwitchClick.bind(this));
        $('#second-lng-switch-btn').on('click', this.onSecondLngSwitchClick.bind(this));
        $('#second-lat-switch-btn').on('click', this.onSecondLatSwitchClick.bind(this));
        $('#close-lat-lng-switch-dialog').on('click', this.HideDialog.bind(this));
        $('#dialog-lat-lng-switch-cancel').on('click', this.HideDialog.bind(this));
    };

    this.ShowDialog = function (point) {
        $('#dialog-lat-lng-switch').show();

        var lng = this.getLatLng(point.lng);
        var lat = this.getLatLng(point.lat);
        var decimalLng = this.changeToDecimal(lng);
        var decimalLat = this.changeToDecimal(lat);

        // change to degree
        var firstLngDegree = $('#first-lng-degree').val(decimalLng.degree);
        var firstLngMinute = $('#first-lng-minute').val(decimalLng.minute);
        var firstLngSecond = $('#first-lng-second').val(decimalLng.second);
        var firstLatDegree = $('#first-lat-degree').val(decimalLat.degree);
        var firstLatMinute = $('#first-lat-minute').val(decimalLat.minute);
        var firstLatSecond = $('#first-lat-second').val(decimalLat.second);
        var degreeLng = this.changeToDegree(firstLngDegree.val(), firstLngMinute.val(), firstLngSecond.val());
        var degreeLat = this.changeToDegree(firstLatDegree.val(), firstLatMinute.val(), firstLatSecond.val());
        $('#first-lng-decimal').val(degreeLng);
        $('#first-lat-decimal').val(degreeLat);

        // change to decimal
        $('#second-lng-decimal').val(lng);
        $('#second-lat-decimal').val(lat);
        $('#second-lng-degree').val(decimalLng.degree);
        $('#second-lng-minute').val(decimalLng.minute);
        $('#second-lng-second').val(decimalLng.second);
        $('#second-lat-degree').val(decimalLat.degree);
        $('#second-lat-minute').val(decimalLat.minute);
        $('#second-lat-second').val(decimalLat.second);

        $('#hide-lng').val(decimalLng.degree + "°" + decimalLng.minute + "'" + decimalLng.second + "\"");
        $('#hide-lat').val(decimalLat.degree + "°" + decimalLat.minute + "'" + decimalLat.second + "\"");
    };

    this.getLatLng = function (value) {
        value = value.toString()
        let index = value.indexOf('.')
        if (index !== -1) {
            value = value.substring(0, 6 + index + 1)
        } else {
            value = value.substring(0)
        }
        return parseFloat(value).toFixed(6)
    }

    this.onFirstLngSwitchClick = function () {
        var value = this.changeToDegree($('#first-lng-degree').val(), $('#first-lng-minute').val(), $('#first-lng-second').val());
        $('#first-lng-decimal').val(value);
    };

    this.onFirstLatSwitchClick = function () {
        var value = this.changeToDegree($('#first-lat-degree').val(), $('#first-lat-minute').val(), $('#first-lat-second').val());
        $('#first-lat-decimal').val(value)
    }

    this.onSecondLngSwitchClick = function () {
        var value = this.changeToDecimal($('#second-lng-decimal').val());
        $('#second-lng-degree').val(value.degree);
        $('#second-lng-minute').val(value.minute);
        $('#second-lng-second').val(value.second);
    };

    this.onSecondLatSwitchClick = function () {
        var value = this.changeToDecimal($('#second-lat-decimal').val());
        $('#second-lat-degree').val(value.degree);
        $('#second-lat-minute').val(value.minute);
        $('#second-lat-second').val(value.second);
    }

    this.changeToDecimal = function (value) {
        var text = value.split(".");
        var degree = text[0];

        var temp = "0." + text[1];
        var temp = String(temp * 60);
        var str = temp.split(".");
        var minute = str[0];

        temp = "0." + str[1];
        temp = temp * 60;
        var second = temp;
        return {
            degree: degree,
            minute: minute,
            second: second
        }
    }

    this.changeToDegree = function (degree, minute, second) {
        var str = parseFloat(minute) + parseFloat(second / 60);
        var value = parseFloat(str / 60) + parseFloat(degree);
        return value;
    }

    this.HideDialog = function () {
        $('#dialog-lat-lng-switch').hide();
        $('#map').css('cursor', 'grab');

        this.Parent.isSwitch = false;
    };

    this.OnFirstLngCopyClick = function () {
        var selected = document.querySelector('#first-lng-decimal');
        selected.select();
        document.execCommand('Copy');
    };

    this.OnFirstLatCopyClick = function () {
        var selected = document.querySelector('#first-lat-decimal');
        selected.select();
        document.execCommand('Copy');
    };

    this.OnSecondLngCopyClick = function () {
        var selected = document.querySelector('#hide-lng');
        selected.select();
        document.execCommand('Copy');
    };

    this.OnSecondLatCopyClick = function () {
        var selected = document.querySelector('#hide-lat');
        selected.select();
        document.execCommand('Copy');
    };
}