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

    this.Startup = function () {
        $('#first-copy-btn').on('click', this.OnFirstCopyClick.bind(this));
        $('#second-copy-btn').on('click', this.OnSecondCopyClick.bind(this));
        $('#first-switch-btn').on('click', this.onFirstSwitchClick.bind(this));
        $('#second-switch-btn').on('click', this.onSecondSwitchClick.bind(this));
        $('#close-lat-lng-switch-dialog').on('click', this.HideDialog.bind(this));
        $('#dialog-lat-lng-switch-cancel').on('click', this.HideDialog.bind(this));

        $('#first-degree').on('change', this.onFirstDegreeChange.bind(this));
        $('#first-minute').on('change', this.onFirstMinuteChange.bind(this));
        $('#first-second').on('change', this.onFirstSecondChange.bind(this));
        $('#second-decimal').on('change', this.onSencondDecimalChange.bind(this));
    };

    this.onFirstDegreeChange = function (event) {
        this.checkInput($(event.target), 180);
    };

    this.onFirstMinuteChange = function (event) {
        this.checkInput($(event.target), 60);
    };

    this.onFirstSecondChange = function (event) {
        this.checkInput($(event.target), 60);
    };

    this.onSencondDecimalChange = function (event) {
        this.checkInput($(event.target), 180);
    }

    this.checkInput = function (element, max) {
        if (element.val().trim() === '') {
            id.addClass('error');
            element.next().show();
            return;
        } else if (Number(element.val()) > max || Number(element.val()) < 0) {
            $(element).addClass('error');
            element.next().show();
            return;
        } else {
            $(element).removeClass('error');
            element.next().hide();
        }
    };

    this.ShowDialog = function () {
        $('#dialog-lat-lng-switch').show();
        $('#first-degree').val('');
        $('#first-minute').val('');
        $('#first-second').val('');
        $('#first-decimal').val('');
        $('#second-degree').val('');
        $('#second-minute').val('');
        $('#second-second').val('');
        $('#second-decimal').val('');
        $('#hide-text').text('');
    };

    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.onFirstSwitchClick = function (event) {
        var degree = $('#first-degree').val();
        var minute = $('#first-minute').val();
        var second = $('#first-second').val();
        $('#first-degree').removeClass('error');
        $('#first-minute').removeClass('error');
        $('#first-second').removeClass('error');

        if (degree.trim() === '' || Number(degree) > 180 || Number(degree) < 0) {
            this.showError($('#first-degree'));
        } else if (minute.trim() === '' || Number(minute) > 60 || Number(minute) < 0) {
            this.showError($('#first-minute'));
        } else if (second.trim() === '' || Number(second) > 60 || Number(second) < 0) {
            this.showError($('#first-second'));
        } else {
            this.hideError($('#first-degree'));
            this.hideError($('#first-minute'));
            this.hideError($('#first-second'));
            var value = this.changeToDegree(degree, minute, second);
            $('#first-decimal').val(value);
        }
    };

    this.onSecondSwitchClick = function () {
        var decimal = $('#second-decimal').val();
        $('#second-decimal').removeClass('error');
        console.log(decimal.length)

        if (decimal.trim() === '' || Number(decimal) > 180 || Number(decimal) < 0) {
            this.showError($('#second-decimal'));
        } else if (decimal.indexOf(".") < 0 || decimal.length < 5) {
            this.showError($('#second-decimal'));
        } else {
            this.hideError($('#second-decimal'));
            var value = this.changeToDecimal(decimal);
            var degree = $('#second-degree').val(value.degree);
            var minute = $('#second-minute').val(value.minute);
            var second = $('#second-second').val(value.second);
            $('#hide-text').val(degree.val() + "°" + minute.val() + "'" + second.val() + "\"");
        }
    };

    this.showError = function (id) {
        id.next().show();
        id.addClass('error');
        alert('请输入正确的值。');
        return
    };

    this.hideError = function (id) {
        id.next().hide();
        id.removeClass('error');
    };

    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();

        this.Parent.isSwitch = false;
    };

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

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