let kakaoMap = {
    init: function(id, locate, latX, longY) {
        this.formId = id;
        this.load(locate, latX, longY);
    },
    geocoder: null,
    schDetailAddrFromCoords: function(coords, callback) {
        // 좌표로 법정동 상세 주소 정보를 요청합니다
        if(this.geocoder) {
            this.geocoder.coord2Address(coords.getLng(), coords.getLat(), callback);
        }
    },
    getMap: function(id) {
        var mapContainer = document.getElementById(id), // 지도를 표시할 div
            mapOption = {
                center: new kakao.maps.LatLng(37.56684, 126.97865), // 지도의 중심좌표
                level: 3, // 지도의 확대 레벨
                mapTypeId : kakao.maps.MapTypeId.ROADMAP // 지도종류
            };

        // 지도를 생성한다
        var map = new kakao.maps.Map(mapContainer, mapOption);

        // 마우스 휠과 모바일 터치를 이용한 지도 확대, 축소를 막는다
        map.setZoomable(false);

        // 지도에 확대 축소 컨트롤을 생성한다
        //var zoomControl = new kakao.maps.ZoomControl();

        // 지도의 우측에 확대 축소 컨트롤을 추가한다
        //map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);

        return map;
    },
    marker: function(map, coords) {
        // 지도에 마커를 생성하고 표시한다
        marker = new kakao.maps.Marker({
            position: coords, // 마커의 좌표
            map: map // 마커를 표시할 지도 객체
        });
    },
    load: function(locate, latX, longY) {
        var _this = this;
        kakao.maps.load(function() {
            var map = _this.getMap(_this.formId + '_MAP');
            // 주소-좌표 변환 객체를 생성합니다
            _this.geocoder = new kakao.maps.services.Geocoder();
            var mapMoveFn = function(result) {
                var coords = new kakao.maps.LatLng(result.y, result.x);
                if(_this.formId.lastIndexOf('DETAIL') > -1) {
                    document.getElementById(_this.formId + '_LAT').value = result.y;
                    document.getElementById(_this.formId + '_LNG').value = result.x;
                }

                // 결과값으로 받은 위치를 마커로 표시합니다
                _this.marker(map, coords);

                // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
                map.setCenter(coords);
            };
            if((latX && longY) && (latX !== '' && longY !== '')) {
                mapMoveFn({'x':longY, 'y':latX});
            } else {
                if(!locate || locate.length == 0 ) {
                    // 지도에 마커를 생성하고 표시한다
                    _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
                } else {
                    // 주소로 좌표를 검색합니다
                    _this.geocoder.addressSearch(locate, function(result, status) {
                        // 정상적으로 검색이 완료됐으면
                        if (status === kakao.maps.services.Status.OK) {
                            mapMoveFn(result[0]);
                        } else {
                            _this.marker(map, new kakao.maps.LatLng(37.56684, 126.97865));
                        }
                    });
                }
            }

            if(_this.formId.lastIndexOf('DETAIL') > -1) {
                _this.listener.drag(map);
            }
        });
    },
    listener: {
        drag: function(map) {
            // 지도 드래깅 이벤트를 등록한다 (드래그 시작 : dragstart, 드래그 종료 : dragend)
            kakao.maps.event.addListener(map, 'drag', function () {
                kakaoMap.schDetailAddrFromCoords(map.getCenter(), function(result, status) {
                    if (status === kakao.maps.services.Status.OK) {

                        document.getElementById(kakaoMap.formId + '_LOTS_ADDRESS').value = result[0].address.address_name ;
                        document.getElementById(kakaoMap.formId + '_ADRES').value = !!result[0].road_address ? result[0].road_address.address_name : result[0].address.address_name ;
                        document.getElementById(kakaoMap.formId + '_STREET_ADDRESS').value = !!result[0].road_address ? result[0].road_address.address_name : $('#' + this.formId + '_STREET_ADDRESS').val();
                        document.getElementById(kakaoMap.formId + '_ZIPNO').value = !!result[0].road_address ? result[0].road_address.zone_no : $('#' + this.formId + '__CMPY_ZIPNO').val() ;
                        document.getElementById(kakaoMap.formId + '_LAT').value = map.getCenter().getLat();
                        document.getElementById(kakaoMap.formId + '_LNG').value = map.getCenter().getLng();

                        // 마커를 클릭한 위치에 표시합니다
                        marker.setPosition(map.getCenter());
                        marker.setMap(map);
                    }
                });
                /* 	var message = '지도를 드래그 하고 있습니다. 지도의 중심 좌표는 ' + map.getCenter().toString() +' 입니다.';
                console.log(message); */
            });
        }
    },
    address: function() {
        var _this = this;
        new daum.Postcode({
            oncomplete: function(data) {
                // 전체주소 리턴
                document.getElementById(kakaoMap.formId + '_ZIPNO').value = data.zonecode;
                document.getElementById(kakaoMap.formId + '_ADRES').value = data.roadAddress;
                document.getElementById(kakaoMap.formId + '_LOTS_ADDRESS').value = !!data.autoJibunAddress ? data.autoJibunAddress : data.jibunAddress;
                document.getElementById(kakaoMap.formId + '_STREET_ADDRESS').value = data.roadAddress;
                document.getElementById(kakaoMap.formId + '_HJ_DONG').value = !!data.hname ? data.hname : data.bname;
                document.getElementById(kakaoMap.formId + '_BJ_DONG').value = data.bname;

                _this.init(kakaoMap.formId, data.roadAddress);
                document.getElementById(kakaoMap.formId + '_ADRES_DTL').focus();
            }
        }).open();
    },
    simpleAddress: function (formId) {
        new daum.Postcode({
            oncomplete: function(data) {
                // 전체주소 리턴
                document.getElementById(formId + '_ZIPNO').value = data.zonecode;
                document.getElementById(formId + '_ADRES').value = data.roadAddress;
                document.getElementById(formId + '_ADRES_DTL').focus();
            }
        }).open();
    }
};
