var header_height = 80; var toolbar_height = 30; var footer_height = 22; var sidebar_width = 420; var sidebar_control = null; var sidebar_visible = true; var search_submited = false; var map = null; var gdirs = null; var xml_group = null; var label_display_limit = 50; var infowin_marker = null; var overlay_array = []; var map_type_array = new Array(); map_type_array['map'] = G_NORMAL_MAP; map_type_array['hybrid'] = G_HYBRID_MAP; map_type_array['satillite'] = G_SATELLITE_MAP; var base_icon = null; var gicon_array = []; var image_array = []; var gicon_dir = 'http://www.travelomap.com/map/img/map/'; image_array['default'] = gicon_dir+'default.png'; image_array['golf'] = gicon_dir+'golf.png'; image_array['hotel'] = gicon_dir+'hotel.png'; image_array['code'] = gicon_dir+'flight.png'; image_array['poi'] = gicon_dir+'poi.png'; var cluster = null; var cluster_icon = null; var cluster_icon_array = []; var cluster_marker = []; var map_click_listener = null; var map_mousemove_listener = null; var infowindowclose_listener = null; var poi_icon = null; var default_spot_only = 0; // 디폴트 스팟만 표시 여부 // 길찾기 데이터: 출발지 이름,번호 / 도착지 이름,번호 // 길찾기 모드에서 출발지와 도착지를 항상 표시해야 하므로 var dfnm='',dfno=0,dtnm='',dtno=0; var dir_travel_mode = null; // 길찾기 방법: 자동차/도보 var is_first_data_load = true; function document_ready() { init_autocomplete(); } var yac = null; function init_autocomplete() { /* // 2010.04.02 - 상단검색기능제거 // 헤더에 검색버튼에 대한 위젯처리 var yds = new YAHOO.util.XHRDataSource("/common/ajax_autocomplete.php"); yds.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT; yds.responseSchema = { fieldDelim: "\t", recordDelim: "\n" }; yds.scriptQueryAppend = "lang="+lang; yac = new YAHOO.widget.AutoComplete("ac_input", "ac_output", yds); yac.minQueryLength = 2; yac.maxResultsDisplayed = 20; yac.autoHighlight = false; yac.useShadow = false; yac.animVert = true; yac.animHoriz = true; yac.prehighlightClassName = "yui-ac-prehighlight"; yac.resultTypeList = false; yac.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) { var pos = YAHOO.util.Dom.getXY(oTextbox); pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight; YAHOO.util.Dom.setXY(oContainer,pos); //yac.setFooter(); return true; }; yac.containerExpandEvent.subscribe(function(ac) { if(search_submited) yac.collapseContainer(); // 폼이 Submit 된 후 AC 목록을 늦게 가져온 경우 }); */ on_resize(); } //--------------------- // 언어 선택 //--------------------- function lang_change(sel) { location.href = sel.value; } function submit_search(page) { var el = document.getElementById('ac_input'); if(el.value == '') { el.focus(); return false; } else { search_submited = true; //yac.collapseContainer(); document.getElementById('btn_search').disabled = true; document.getElementById('sidebar_iframe').style.display = 'block'; sidebar_control.resize(); show_sidebar(); show_loading(); return true; } } function go_list(page) { submit_search(page); } function GLoad() { if(GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map_canvas"));//,{googleBarOptions:{style:"new"}}); map.setCenter(new GLatLng(37,127),5); //map.enableGoogleBar(); //map.addMapType(G_SATELLITE_3D_MAP); map.addMapType(G_PHYSICAL_MAP); map.addControl(new GMapTypeControl()); map.addControl(new GScaleControl()); map.addControl(new GNavLabelControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8,31))); map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,55))); map.addControl(new ExtMapTypeControl({posRight:426,showTraffic:true,showTrafficKey:true,showMore:true})); sidebar_control = new SidebarControl(); map.addControl(sidebar_control); map.addControl(new StreetviewControl()); map.addControl(new DirectionControl()); GEvent.addListener(map, "moveend", map_moveend); GEvent.addListener(map, "infowindowclose", map_infowindowclose); //길찾기 관련 콘트롤 추가 // map.addControl(new ContextMenuControl()); // GEvent.addListener(map, "singlerightclick", map_singlerightclick); if(sidebar_no > 0) { var trigger = document.getElementById('panel_'+owner_name+'_'+sidebar_no); panel.show(trigger,{url:'url_intro.php',owner_name:owner_name,owner_no:owner_no,url_no:url_no,menu_no:sidebar_no}); } /* //alert(show_initial_data); if(show_initial_data == 1) { //----------------------------------------------------------------------------------------------- // 인트라넷 > App 관리 > URL > 트래블스팟에서 설정된 그룹 데이터 목록 가져오기 (최초 한번 로딩) //----------------------------------------------------------------------------------------------- var url = '/map/xml_group.php?lang='+lang+'&url_no='+url_no+'&cluster_by_area='+cluster_by_area; //window.open(url); GDownloadUrl(url, function(response, responseCode) { if(response) { var xml = GXml.parse(response); if(xml.documentElement) { xml_group = xml.documentElement.getElementsByTagName('marker'); if(use_cluster == 1) { if(cluster_by_area == 0) cluster_icon = MapIconMaker.createFlatIcon({width:12,height:12,primaryColor:"#cc0000",shape:"circle"}); cluster_show(true); } else { map.setCenter(glatlng(clat,clng),czoom); } } } else { map.setCenter(glatlng(clat,clng),czoom); } }); } else { */ map.setCenter(glatlng(clat,clng),czoom); //} if(document.getElementById('footer')) document.getElementById('footer').style.visibility = 'visible'; //set_base_icon(); if(is_hide_sidebar == 1) hide_sidebar(); } } function map_moveend() { if(show_initial_data == 1) { if(use_cluster == 1) { if(map.getZoom() > cluster_zoom) { data_load(); } else { if(cluster_by_area == 1) { cluster_show(); } else { if(cluster == null) cluster_show(); } } } else { data_load(); } } else { data_load(); } var div = document.getElementById('toolbar_info'); if(div) div.innerHTML = 'Level '+map.getZoom(); } function map_infowindowclose() { if(search_mode) { search_mode = false; } else { search_marker_id = ''; } if(cluster && infowin_marker) map.removeOverlay(infowin_marker); } //----------------------- // 검색결과 클릭했을 때 //----------------------- function search_result_click(ownm,owno,lat,lng,zoom,forcezoom) { search_mode = true; search_marker_id = ownm+':'+owno; map.closeInfoWindow(); //if(forcezoom) { //-------------------------------- // 줌 레벨 변경 후 마커 보여주기 //-------------------------------- map.setCenter(glatlng(lat,lng),15); //parseInt(zoom,10)); //} //else { //--------------------------------- // 현재 줌 상태에서 마커 보여주기 //--------------------------------- // map.setCenter(glatlng(lat,lng)); //} } function xml_parse(r) { return { ownm: r.getAttribute('ownm').toLowerCase(), owno: r.getAttribute('owno'), name: r.getAttribute('name'), lat: r.getAttribute('lat'), lng: r.getAttribute('lng'), zoom: r.getAttribute('zoom'), icon_url: r.getAttribute('icon_url'), icon_width: r.getAttribute('icon_width'), icon_height: r.getAttribute('icon_height'), hide_label: r.getAttribute('hide_label'), jump: r.getAttribute('jump'), point: r.getAttribute('point'), shape: r.getAttribute('shape'), enc_points: r.getAttribute('enc_points'), enc_levels: r.getAttribute('enc_levels'), enc_zoomfactor: r.getAttribute('enc_zoomfactor'), enc_numlevels: r.getAttribute('enc_numlevels'), label_vertex: r.getAttribute('label_vertex'), label_color: r.getAttribute('label_color'), line_color: r.getAttribute('line_color'), line_width: r.getAttribute('line_width'), line_opacity: r.getAttribute('line_opacity'), fill_color: r.getAttribute('fill_color'), fill_opacity: r.getAttribute('fill_opacity'), category_no: r.getAttribute('category_no'), //ctsm: r.getAttribute('ctsm'), //calg: r.getAttribute('calg'), //camd: r.getAttribute('camd'), //casm: r.getAttribute('casm'), poi_icon: r.getAttribute('poi_icon'), parent_name: r.getAttribute('parent_name'), parent_no: r.getAttribute('parent_no'), total: r.getAttribute('total') }; } function data_load() { show_map_loading(); var zoom = map.getZoom(); var b = map.getBounds(); var ne = b.getNorthEast(); var sw = b.getSouthWest(); var bounds = sw.toUrlValue()+','+map.getCenter().toUrlValue()+','+ne.toUrlValue(); var xml_url = '/map/xml3.php?timestamp='+get_timestamp()+'&lang='+lang+'&zoom='+zoom+'&bounds='+bounds+'&url_no='+url_no+'&dfnm='+dfnm+'&dfno='+dfno+'&dtnm='+dtnm+'&dtno='+dtno; //window.open(xml_url); GDownloadUrl(xml_url, function(response, responseCode) { clear_overlays(); var label_show = true; if(!response) { //alert('Data fetch failed...'); } else { var xml = GXml.parse(response); if(!xml.documentElement) { //alert('Data fetch failed...'); } else { var meta = xml.documentElement.getElementsByTagName("meta"); var total = meta[0] ? meta[0].getAttribute('total') : 0; var r = xml.documentElement.getElementsByTagName('marker'); if(xml_group) { //if((r.length + xml_group.length) > label_display_limit) label_show = false; var k = 0; for(var i=0,len=xml_group.length; i label_display_limit) label_show = false; } else { if(r.length > label_display_limit) label_show = false; } var ownm = ''; var total = 0; for(var i=0,len=r.length; i= region_zoom) poly_show(opt); } else { var id = opt.ownm+':'+opt.owno; if(!overlay_array[id]) marker_show(opt); } } //if(search_marker_id == '' && owner_no != '') { // search_marker_id = owner_name+':'+owner_no // overlay_array[search_marker_id] = null; //} if(search_marker_id != '') { if(overlay_array[search_marker_id]) { //----------------------------------------------------- // 지도에 이미 표시되어 있는 경우 인포윈도우 열어주기 //----------------------------------------------------- var iw = map.getInfoWindow(); if(iw.isHidden()) { GEvent.trigger(overlay_array[search_marker_id],'click'); } } else { //------------------------------------------------ // 줌 레벨이 맞지 않아 지도에 표시되지 않은 경우 //------------------------------------------------ var arr = search_marker_id.split(':'); url = '/map/xml_get.php?lang='+lang+'&ownm='+arr[0]+'&owno='+arr[1]; //window.open(url); GDownloadUrl(url, function(response,responseCode) { if(response) { var xml = GXml.parse(response); if(!xml || !xml.documentElement) { //alert(response); } else { var r = xml.documentElement.getElementsByTagName('marker'); if(!r[0]) { //window.open(url); } else { var opt = xml_parse(r[0]); opt.label_show = label_show; marker_show(opt); var id = arr[0]+':'+arr[1]; GEvent.trigger(overlay_array[id],'click'); } } } }); } } } } if(xml_group && zoom >= cluster_zoom) { for(var i=0,len=xml_group.length; i 지명 || opt.category_no == '4930' || opt.category_no == '4929' || opt.category_no == '4927' || opt.category_no == '5006' || opt.category_no == '7058' || opt.category_no == '7059' || opt.category_no == '7060' || opt.category_no == '4926' || opt.category_no == '4931' || opt.category_no == '5002' || opt.category_no == '4928') { if(opt.label_show) { var label = label_create(point,'',opt.name,'label_location'); //label.percentOpacity = 80; map.addOverlay(label); overlay_array[id] = label; /* GEvent.addListener(label, 'click', function() { GDownloadUrl('/map/infowin.php?lang='+lang+'&owner_name='+opt.ownm+'&owner_no='+opt.owno, function(response,responseCode) { if(response) { search_marker_id = id; map.openInfoWindowHtml(label.getPoint(),response); infowin_marker = label; } }); }); */ } } else { if(opt.is_cluster) { if(cluster_by_area == 1) { var icon = create_icon(opt.total); marker = new GMarker(point,{icon:icon}); GEvent.addListener(marker, 'click', function() { // 행정지역 코드에 지정된 지도 중심과 레벨로 이동 var zoom = opt.zoom ? parseInt(opt.zoom,10) : 12; map.setCenter(this.getLatLng(),zoom); }); map.addOverlay(marker); } else { marker = new GMarker(point, {title:opt.name, icon:cluster_icon, title:opt.name}); GEvent.addListener(marker, 'click', function() { search_marker_id = id; if(this.response) { map.openInfoWindowHtml(marker.getPoint(),this.response); } else { var s = '/map/infowin.php?lang='+lang+'&owner_name='+opt.ownm+'&owner_no='+opt.owno; //alert(s); GDownloadUrl(s, function(response,responseCode) { if(response) map.openInfoWindowHtml(marker.getPoint(),response); }); } }); //GEvent.addListener(marker, 'mouseover', function() { // GEvent.trigger(marker,'click'); //}); } cluster_marker.push(marker); } else { var poi_map_icon = ''; var nWidth = 32; var nHeight = 32; var poi_map_icon = ''; var icon_width = 42; var icon_height = 42; //if(!opt.icon_url || opt.icon_url == '') { if(opt.parent_name) { //------------ // 종속 POI //------------ //alert(opt.icon_url); if(opt.icon_url.indexOf('http://') > -1) { poi_map_icon = opt.icon_url.replace(/\^/g,'&'); icon_width = opt.icon_width; icon_height = opt.icon_height; } else { poi_map_icon = gicon_dir + opt.icon_url; } //poi_map_icon = opt.icon_url.replace(/\^/g,'&'); //window.open(poi_map_icon); //icon_width = opt.icon_width ? opt.icon_width : icon_width; //icon_height = opt.icon_height ? opt.icon_height : icon_height; /* var icon = new GIcon(G_DEFAULT_ICON); icon.image = poi_map_icon; icon.shadow = ''; //icon.iconAnchor = new GPoint(-40, -60); //icon.infoWindowAnchor = new GPoint(9, 2); icon.iconSize = new GSize(icon_width,icon_height); icon.iconAnchor = new GPoint(icon_width/2,icon_height); marker = new GMarker(point,{icon:icon}); */ if(opt.parent_name == 'golf') opt.hide_label = '1'; marker = new MarkerLight(point, {image:poi_map_icon,width:icon_width,height:icon_height}); } else { /* if(opt.poi_icon == null || opt.poi_icon == '') { poi_map_icon = get_icon_image(opt); if(url == 'toyokoinn078') { // 도요코인 신주쿠 가부키초 icon_width = 115; icon_height = 63; poi_map_icon = gicon_dir+'toyokoinn078.png'; } else if(url == 'daiwaresort') { // 다이와리조트 icon_width = 240; icon_height = 57; poi_map_icon = 'http://www.travelomap.com/map/img/map/20110610162019.png'; } } else { var xAry = opt.poi_icon.split("~"); poi_map_icon = gicon_dir + xAry[0]; icon_width = parseInt(xAry[1]); icon_height = parseInt(xAry[2]); } //marker = new MarkerLight(point, {image:poi_map_icon,width:icon_width,height:icon_height}); //marker = new GMarker(point); */ //var icon_url = opt.icon_url ? opt.icon_url : image_array['default']; //if(opt.category_no == 8763) icon_url = gicon_dir+'8330.png'; // 교통 > 버스+ //alert(opt.icon_url); marker = new MarkerLight(point, {image:gicon_dir+opt.icon_url,width:icon_width,height:icon_height}); } //GLog.write('id = '+id+', poi_map_icon = '+poi_map_icon); marker.id = id; if(opt.ownm == 'golf' || opt.ownm == 'hotel' || opt.ownm == 'poi') { GEvent.addListener(marker, 'click', function() { search_marker_id = id; infowin_marker = this; if(this.response) { map.openInfoWindowHtml(marker.getPoint(),this.response); } else { //map.openInfoWindowHtml(marker.getPoint(),'
'); var s = '/map/infowin.php?timestapm='+get_timestamp()+'&lang='+lang+'&owner_name='+opt.ownm+'&owner_no='+opt.owno; //window.open(s); GDownloadUrl(s, function(response,responseCode) { if(response) map.openInfoWindowHtml(marker.getPoint(),response); }); } }); //GEvent.addListener(marker, 'mouseover', function() { // GEvent.trigger(marker,'click'); //}); } //------------------------------------------------------ // URL의 대상 데이터(골프장,호텔,POI)는 항상 라벨 표시 //------------------------------------------------------ if(owner_name+':'+owner_no == id) opt.label_show = true; if(opt.hide_label == '1') { } else { if(opt.label_show) { var style = 'label_'+opt.ownm; if(opt.camd == 4846) style = 'label_black'; // 교통 > 공항 //var label = label_create(point,id,opt.name,style,{width:16,height:-6}); var label = label_create(point,id,opt.name,style,{width:18,height:-19}); marker.label = label; map.addOverlay(label); //GLog.write('라벨 표시: '+opt.name); } } map.addOverlay(marker); //GLog.write('마커 표시: '+id); } overlay_array[id] = marker; overlay_array[id].name = opt.name; } } function near_link(ownm,owno) { win_open('/map/near.php?owner_name='+ownm+'&owner_no='+owno, 'popupnear', 1024, 768,"toolbar=no,menubar=no,scrollbars=no,resizable=yes"); } function spot_finder(ownm,owno) { win_open('/map/spot_finder.php?url_no='+url_no+'&owner_name='+ownm+'&owner_no='+owno, 'popupspotfinder', 1024, 768,"toolbar=no,menubar=no,scrollbars=no,resizable=yes"); } function cluster_show(is_first) { if(cluster_by_area == 1) { if(cluster_marker.length == 0) { map.clearOverlays(); for(var i=0,len=xml_group.length; i 0) { for(var i in cluster_marker) { map.removeOverlay(cluster_marker[i]); } cluster_marker = []; } } function get_icon_image(opt) { var img = image_array['default']; if(opt.ownm == 'poi') { if(opt.calg == 4789) img = gicon_dir+'4789.png'; // 관광 if(opt.calg == 4799) img = gicon_dir+'4799.png'; // 쇼핑 if(opt.calg == 4836) img = gicon_dir+'4836.png'; // 레스토랑 if(opt.camd == 4827) img = gicon_dir+'4827.png'; // 관광 > 온천 if(opt.camd == 4846) img = gicon_dir+'4846.png'; // 교통 > 공항 if(opt.camd == 4849) img = gicon_dir+'4849.png'; // 교통 > 렌터카 if(opt.camd == 8330 || opt.camd == 4885 || opt.camd == 8763) img = gicon_dir+'8330.png'; // 교통 > 버스+ // 교통 > 지하철+ if( opt.camd == 8478 || opt.camd == 8568 || opt.camd == 8584 || opt.camd == 8583 || opt.camd == 8558 || opt.camd == 8582 || opt.camd == 8540 || opt.camd == 8565 || opt.camd == 8585 || opt.camd == 8586 || opt.camd == 8587 || opt.camd == 8588 || opt.camd == 4896 || opt.camd == 7990 || opt.camd == 8569 || opt.camd == 8589 || opt.camd == 5007 || opt.camd == 8590 || opt.camd == 8268 || opt.camd == 8561 || opt.camd == 4848 || opt.camd == 8564 || opt.camd == 8546 || opt.camd == 7771 || opt.camd == 7768 || opt.camd == 7770 || opt.camd == 7769 || opt.camd == 8591 || opt.camd == 8571 || opt.camd == 8592 || opt.camd == 8593 || opt.camd == 8666 || opt.camd == 8669 || opt.camd == 8740 || opt.camd == 8766 || opt.camd == 8770 || opt.camd == 8771 || opt.camd == 8772 || opt.camd == 8773 || opt.camd == 8774 || opt.camd == 8775 || opt.camd == 8778 ) img = gicon_dir+'8478.png'; if(opt.casm == 4967) img = gicon_dir+'4967.png'; // 쇼핑 > 문구점 > 킨코스 if(opt.casm == 7259) img = gicon_dir+'7259.png'; // 쇼핑 > 편의점 > 세븐일레븐 if(opt.casm == 4968) img = gicon_dir+'4968.png'; // 식당 > 까페 > 스타벅스 if(opt.casm == 7258) img = gicon_dir+'7258.png'; // 식당 > 까페 > 던킨도너츠 if(opt.casm == 7129) img = gicon_dir+'7129.jpg'; // 관광 > ATM > 세븐뱅크 } else { img = image_array[opt.ownm]; } return img; } function create_icon(label) { var icon = null; if(cluster_icon_array[label]) { icon = cluster_icon_array[label]; } else { var option = {}; option.width = (label.length*8)+12; option.height = (label.length*8)+12; option.label = label; option.labelSize = '13'; option.labelColor = '#FFFFFF'; option.primaryColor = '#CC0000'; option.shape = 'circle'; var icon = MapIconMaker.createFlatIcon(option); icon.iconAnchor = new GPoint(14,32); icon.infoWindowAnchor = new GPoint(0,57); cluster_icon_array[label] = icon; } return icon; } function label_create(point,id,name,style,offset,opacity,overlap,color) { style = style ? style : 'label'; return new ELabel(point, ' '+name+' ',style,offset,opacity,overlap,color); } function label_click(label) { var id = label.id; if(id == '') return; if(id.indexOf('poly:') > -1) { var a = id.split(':'); var p = glatlng(a[2],a[3]); var z = parseInt(a[4],10); map.setCenter(p,z); } else { if(overlay_array[id]) { search_marker_id = id; GEvent.trigger(overlay_array[id],'click'); } } } function infowin_photo_click(ownm,owno,file_no) { //alert(ownm+' / '+owno+' / '+file_no); popup_image_view(file_no); } function get_offset_center(x,y) { var offset = new GPoint(x,y); return map.fromDivPixelToLatLng(offset); } function glatlng(lat,lng) { if(lng) { return new GLatLng(parseFloat(lat),parseFloat(lng)); } else { if(lat.indexOf('|') > -1) { var a1 = lat.split('|'); var a2 = []; for(var i=0,len=a1.length; i -1) hide_sidebar(); else show_sidebar(); } function show_sidebar() { panel.hide(); var btn = document.getElementById('sidebar_toggle_button'); btn.src = '/map/img/searcharea_bn_close.gif'; btn.style.left = sidebar_control.getWidth()+'px'; sidebar_control.show(); sidebar_visible = true; } function hide_sidebar() { var btn = document.getElementById('sidebar_toggle_button'); btn.src = '/map/img/searcharea_bn_open.gif'; btn.style.left = '0px'; sidebar_control.hide(); sidebar_visible = false; } function show_map_loading() { if(document.getElementById('map_loading')){ var el = document.getElementById('map_loading'); var left = sidebar_visible ? sidebar_width : 0; el.style.left = (left+10)+'px'; el.style.visibility = 'visible'; } } function hide_map_loading() { if(document.getElementById('map_loading')){ document.getElementById('map_loading').style.visibility = 'hidden'; } } //------------------ // Sidebar CONTROL //------------------ function SidebarControl() {} SidebarControl.prototype = new GControl(); SidebarControl.prototype.initialize = function(map) { var div = document.createElement('div'); div.id = 'sidebar_container'; var s = '' +'
' +'' // 출발지 +'' // 도착지 //+'' +'' +'
'+arr_lang['863']+'
'+arr_lang['864']+'
 ' // +''+arr_lang['1045']+' ' // 자동차 // +''+arr_lang['1044'] // 도보 //+'
 ' +' ' // 길찾기 +' ' // 지우기 +'
'; div.innerHTML = s; map.getContainer().appendChild(div); this._div = div; return div; } SidebarControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(0,0)); } SidebarControl.prototype.show = function() { this._div.style.display = 'block'; } SidebarControl.prototype.hide = function() { this._div.style.display = 'none'; } SidebarControl.prototype.resize = function(opt) { var width = (opt && opt.width) ? opt.width : sidebar_width; this._div.style.width = width+'px'; } SidebarControl.prototype.getWidth = function() { //return parseInt((this._div.style.width).replace('px','')); var width = $('#sidebar_container').width(); return (width+'').replace('px',''); } //------------------- // MAP CONTROL PANEL //------------------- var panel = { id: '', id_old: '', control: [], trigger: null, show: function(trigger,opt) { dir_clear(); if(typeof(trigger) == 'string') { trigger = document.getElementById(trigger); } if(opt.url && opt.url.indexOf('/planner/') > -1) { sidebar_control.resize({width:460}); } else if(opt.url && opt.url.indexOf('/booking/') > -1) { sidebar_control.resize({width:720}); } else { sidebar_control.resize(); } if(opt.owner_name == 'golf' && opt.url != 'product_list.php') { hide_sidebar(); panel.hide(); this.id = trigger.id; this.trigger = trigger; this.trigger.className = 'selected'; var url = '/map/'+this.id+'.php?owner_name='+opt.owner_name+'&owner_no='+opt.owner_no+'&url_no='+opt.url_no; if(this.control[this.id]) { this.control[this.id].show(); if(this.id == 'panel_product_list') { this.control[this.id].reload(url); } } else { var option = { position: new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7,7)), width: opt.width, height: opt.height, url: url } var ctrl = new MapPanelControl(option); map.addControl(ctrl); this.control[this.id] = ctrl; } } else { show_loading(); show_sidebar(); this.id = trigger.id; this.trigger = trigger; this.trigger.className = 'selected'; var url_no = opt.url_no ? opt.url_no : ''; var code_no = opt.code_no ? opt.code_no : ''; var category_lg_no = opt.category_lg_no ? opt.category_lg_no : ''; var menu_no = opt.menu_no ? opt.menu_no : ''; var param = 'owner_name='+opt.owner_name+'&owner_no='+opt.owner_no+'&url_no='+url_no+'&code_no='+code_no+'&category_lg_no='+category_lg_no+'&menu_no='+menu_no; if(opt.force_url) { url = opt.url; } else { url = (opt.url.substr(0,1) == '/') ? opt.url+'?'+param : '/map/'+opt.url+'?'+param } //window.open(url); //alert(url); document.getElementById('sidebar_iframe').src = url; document.getElementById('sidebar_iframe').style.display = 'block'; if(opt.url.indexOf('smartcaddy') > -1) map.setMapType(G_SATELLITE_MAP); // 골프장 스마트 캐디 메뉴인 경우 위성지도로 변경 } }, hide: function() { if(this.id != '') { if(panel.control[this.id]) panel.control[this.id].hide(); var el = document.getElementById(this.id); if(el) el.className = ''; } this.id = ''; }, resize: function() { if(this.id == '') return; if(panel.control[this.id]) panel.control[this.id].resize(); } } //------------------------- // MAP PANEL FRAME CONTROL //------------------------- function MapPanelControl(option) { this.opt = option ? option : {}; this.container = null; this.iframe = null; this.close = null; } MapPanelControl.prototype = new GControl(); MapPanelControl.prototype.initialize = function() { var me = this; me.container = document.createElement('div'); //me.container.innerHTML = ''; me.iframe = document.createElement('iframe'); me.iframe.src = me.opt.url; me.iframe.setAttribute('width',this.opt.width); me.iframe.setAttribute('height',this.opt.height); //me.iframe.setAttribute('frameborder',0); me.iframe.setAttribute("frameBorder","no"); me.iframe.className = 'map_panel_iframe'; me.container.appendChild(me.iframe); me.close = document.createElement('div'); me.close.className = 'map_panel_close_button'; me.close.style.left = (me.opt.width+8)+'px'; me.close.innerHTML = ''; me.close.onclick = function() { me.hide(); panel.hide(); } me.container.appendChild(me.close); //GEvent.addDomListener(map, 'click', function() { // me.hide(); //}); map.getContainer().appendChild(me.container); return me.container; } MapPanelControl.prototype.getDefaultPosition = function() { return this.opt.position; } MapPanelControl.prototype.show = function() { this.toggle('visible','block'); } MapPanelControl.prototype.hide = function() { this.toggle('hidden','none'); } MapPanelControl.prototype.reload = function(url) { this.iframe.src = url; } MapPanelControl.prototype.toggle = function(vis,dis) { this.container.style.visibility = vis; this.container.style.display = dis; } MapPanelControl.prototype.resize = function(opt) { var width = document.body.offsetWidth; var height = get_window_height() - 154; this.iframe.setAttribute('height',height); this.iframe.contentWindow.panel_iframe_body_resize(); } //---------------------- // 길찾기 버튼 컨트롤 //---------------------- function DirectionControl() {} DirectionControl.prototype = new GControl(); DirectionControl.prototype.initialize = function(map) { this.container = document.createElement("div"); this.container.style.border = "1px solid #000"; this.div = document.createElement("div"); this.div.className = 'gbutton'; this.container.appendChild(this.div); this.div.appendChild(document.createTextNode(arr_lang['865'])); // 길찾기 GEvent.addDomListener(this.div, "click", function() { show_dir_container(); }); map.getContainer().appendChild(this.container); return this.container; } DirectionControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(342,7)); } //-------------------------- // 길찾기 폼에 입력값 세팅 //-------------------------- function set_dir(fromto,ownm,owno) { var overlay = overlay_array[ownm+':'+owno]; if(overlay) { show_sidebar(); show_dir_container(); document.getElementById(fromto).value = overlay.name; document.getElementById(fromto+'_latlng').value = overlay.getLatLng().toUrlValue(); //---------------------------------------------------------------- // 길 찾기 실행 후 디폴트 스팟만 표시될 때 출발지와 도착지는 // 지도에 표시해야 하기에 data_load() 시에 파라미터로 넘겨준다. //---------------------------------------------------------------- if(fromto == 'dir_from') { dfnm = ownm; dfno = owno; } else { dtnm = ownm; dtno = owno; } if(infowin_no != '0') { //------------------------------------------------------------------ // 지도 옵션에서 처음 로드 시 인포윈도우를 표시하도록 설정된 경우 // 출발지 또는 도착지를 이 인포윈도우의 오버레이로 자동설정한다. //------------------------------------------------------------------ var fromto_id = (fromto == 'dir_from') ? 'dir_to' : 'dir_from'; document.getElementById(fromto_id).value = url_title; document.getElementById(fromto_id+'_latlng').value = clat+','+clng; if(fromto == 'dir_from') { dtnm = infowin_name; dtno = infowin_no; } else { dfnm = infowin_name; dfno = infowin_no; } } } } //-------------------------------- // 길찾기 사이드바 프레임 보이기 //-------------------------------- function show_dir_container() { document.getElementById('sidebar_iframe').style.display = 'none'; document.getElementById('dir_container').style.display = 'block'; document.getElementById('dir_form').focus(); } //--------------- // 길 찾기 실행 //--------------- function dir_submit(travel_mode) { map.closeInfoWindow(); document.getElementById('dir_msg').style.display = 'block'; document.getElementById('dir_search').innerHTML = ''; var from = document.getElementById('dir_from_latlng').value; var to = document.getElementById('dir_to_latlng').value; if(from == '') { from = document.getElementById('dir_from').value; if(from == '') { document.getElementById('dir_from').focus(); return; } } if(to == '') { to = document.getElementById('dir_to').value; if(to == '') { document.getElementById('dir_to').focus(); return; } } dir_travel_mode = travel_mode ? travel_mode : 'driving'; if(gdirs == null) { gdirs = new GDirections(map,document.getElementById('dir_canvas')); GEvent.addListener(gdirs, "load", function() { map.clearOverlays(); default_spot_only = 1; document.getElementById('img_dir_loading').style.display = 'none'; var s = (dir_travel_mode == 'driving') ? arr_lang['1045'] : arr_lang['1044']; // 자동차:도보 document.getElementById('dir_msg').innerHTML = ' '+arr_lang['865']+': '+s+''; }); GEvent.addListener(gdirs, "addoverlay", function() { //------------------------------------------------------------------------ // 지도 위에 길찾기 경로 출력 후 모든 오버레이 지우고 디폴트 스팟만 표시 //------------------------------------------------------------------------ map.zoomOut(); }); GEvent.addListener(gdirs, "error", function() { document.getElementById('img_dir_loading').style.display = 'none'; var df = document.getElementById('dir_from').value; var dt = document.getElementById('dir_to').value; if(dir_travel_mode == 'driving') { //---------------------------- // 자동차 길찾기 실패한 경우 //---------------------------- dir_submit('walking'); } else { //----------------------------------------------- // 자동차 길찾기 실패 + 도보 길찾기 실패한 경우 //----------------------------------------------- var s = '
'; s+= ''+arr_lang['867']+''; s+= '
'+arr_lang['868']+'
'; // 구글 길 찾기 정보가 없습니다. s+= ''; // 구글 길 찾기 사이트로 이동 s+= '
'; document.getElementById('dir_msg').innerHTML = s; } }); } //alert(dfnm+','+dfno+' > '+dtnm+','+dtno); // 출발지, 도착지 정보 document.getElementById('dir_msg').innerHTML = ''; if(from != '' && to != '') { //---------------------------------------------- // 출발지와 도착지가 설정되었으면 길 찾기 실행 //---------------------------------------------- document.getElementById('img_dir_loading').style.display = 'inline'; var f = document.getElementById('form_dir'); var opt = (dir_travel_mode == 'driving') ? {locale:hl,travelMode:G_TRAVEL_MODE_DRIVING} : {locale:hl,travelMode:G_TRAVEL_MODE_WALKING}; // 자동차 : 도보 gdirs.load('from: '+from+' to: '+to, opt); } } //---------------------------------------------------------------- // 스마트 캐디: 사이드 바 프레임에서 홀 번호 클릭 했을 때 호출됨 //---------------------------------------------------------------- function smartcaddy_hole_click(opt) { smartcaddy_clear(); var ll = glatlng(opt.lat,opt.lng); map.setCenter(ll); map.openInfoWindowHtml(ll,'Hole '+opt.hole_number+''); } //------------------------------ // 스마트 캐디: 거리 측정 시작 //------------------------------ var smartcaddy_marker = null; var smartcaddy_poly = []; var smartcaddy_floating_marker = null; function smartcaddy_start(hole_no) { map.closeInfoWindow(); smartcaddy_clear(); map_mousemove_listener = GEvent.addListener(map, 'mousemove', function(latlng) { // http://esa.ilmari.googlepages.com/mymapsmarker.htm var cursor_moving = true; if(smartcaddy_floating_marker == null) { smartcaddy_floating_marker = new GMarker(latlng,{bouncy:false}); map.addOverlay(smartcaddy_floating_marker); } if(cursor_moving) smartcaddy_floating_marker.setLatLng(latlng); }); map_click_listener = GEvent.addListener(map, "click", function(overlay, latlng) { if(latlng) { smartcaddy_cancel(); smartcaddy_marker = new GMarker(latlng, {bouncy:false}); map.addOverlay(smartcaddy_marker); infowindowclose_listener = GEvent.addListener(map, "infowindowclose", function () { smartcaddy_cancel(); }); //window.open('/map/golf_smartcaddy_holeinfo.php?hole_no='+hole_no); $.post('/map/golf_smartcaddy_holeinfo.php',{'hole_no':hole_no},function(res) { var html = []; $.each(res,function(i,r) { if(r.type == 'green' || r.type == 'teebox') { var ll = glatlng(r.lat,r.lng); var c = '#00CC00'; if(r.type == 'teebox') c = '#FF9900'; var poly = new GPolyline([latlng,ll],c,2,1); map.addOverlay(poly); smartcaddy_poly.push(poly); var meter = poly.getLength(); var yard = meter * 1.0936; meter = parseInt(parseInt(meter*100,10)/100,10); yard = parseInt(parseInt(yard*100,10)/100,10); if(r.type == 'green') { top.sidebar_iframe.set_data('green_yard',yard); top.sidebar_iframe.set_data('green_meter',meter); } else if(r.type == 'teebox') { top.sidebar_iframe.set_data('tee_yard',yard); top.sidebar_iframe.set_data('tee_meter',meter); } } }); },'json'); } }); } //------------------------------ // 스마트 캐디: 거리 측정 취소 //------------------------------ function smartcaddy_cancel() { smartcaddy_clear(); var f = top.sidebar_iframe.document.form1; f.btn_start.value = arr_lang['1354']; // 거리 측정 } //---------------------------------------- // 스마트 캐디: 리스너와 오버레이 지우기 //---------------------------------------- function smartcaddy_clear() { if(map_mousemove_listener != null) { GEvent.removeListener(map_mousemove_listener); map_mousemove_listener = null; } if(map_click_listener != null) { GEvent.removeListener(map_click_listener); map_click_listener = null; } if(infowindowclose_listener != null) { GEvent.removeListener(infowindowclose_listener); infowindowclose_listener = null; } if(smartcaddy_marker != null) { map.removeOverlay(smartcaddy_marker); smartcaddy_marker = null; } if(smartcaddy_floating_marker != null) { map.removeOverlay(smartcaddy_floating_marker); smartcaddy_floating_marker = null; } for(var i in smartcaddy_poly) { map.removeOverlay(smartcaddy_poly[i]); } smartcaddy_poly = []; top.sidebar_iframe.clear(); } function dir_google_link() { var from = document.getElementById('dir_from').value+'@'+document.getElementById('dir_from_latlng').value; var to = document.getElementById('dir_to').value+'@'+document.getElementById('dir_to_latlng').value; var url = gdir_google_link = 'http://maps.google.com/maps?f=d&source=s_d&saddr='+from+'&daddr='+to+'&hl='+hl; window.open(url); } function dir_clear() { document.getElementById('img_dir_loading').style.display = 'none'; document.getElementById('dir_from').value = ''; document.getElementById('dir_from_latlng').value = ''; document.getElementById('dir_to').value = ''; document.getElementById('dir_to_latlng').value = ''; document.getElementById('dir_msg').innerHTML = ''; document.getElementById('dir_search').innerHTML = ''; map.closeInfoWindow(); if(gdirs) gdirs.clear(); if(default_spot_only) { default_spot_only = 0; data_load(); } //--------------------------------- // 출발지,도착지 이름과 번호 리셋 //--------------------------------- dfnm = ''; dfno = 0; dtnm = ''; dtno = 0; } function dir_search_item_click(obj,opt) { document.getElementById('dir_'+opt).value = obj.value; } function dir_search_list_toggle(img,opt) { if(img.src.indexOf('minus')>-1) { img.src = '/map/img/plus.gif'; document.getElementById('dir_search_list_'+opt).style.display = 'none'; } else { img.src = '/map/img/minus.gif'; document.getElementById('dir_search_list_'+opt).style.display = 'block'; } } function get_cluster_icon(opt) { if(cluster_icon[opt.label]) return cluster_icon[opt.label]; var o = {}; var wh = (opt.label.length*8)+16; o.width = wh; o.height = wh; o.shape = 'circle'; o.label = opt.label; o.labelSize = 12; o.primaryColor = cluster_icon_color[opt.label.length]; o.labelColor = '#FFFFFF'; var icon = MapIconMaker.createFlatIcon(o); icon.iconAnchor = new GPoint(14,32); cluster_icon[opt.label] = icon; return icon; } function on_resize() { var sidebar_toggle_button = document.getElementById('sidebar_toggle_button'); var win_width = document.body.offsetWidth; var win_height = get_win_height(); var canvas_height = win_height - header_height - toolbar_height - footer_height; try { sidebar_toggle_button.style.top = ((canvas_height / 2) + 50) + 'px'; var el = document.getElementById('sidebar_container'); var width = el ? el.style.width : sidebar_width+'px'; if(sidebar_visible) sidebar_toggle_button.style.left = width; document.getElementById('map_canvas').style.height = canvas_height+'px'; document.getElementById('dir_container').style.height = canvas_height+'px'; } catch(e) { } if(map) { map.checkResize(); } else { sidebar_toggle_button.style.visibility = 'visible'; GLoad(); } } function on_unload() { GUnload(); } //---------------------------- // 골프장에 연결된 호텔 링크 //---------------------------- function show_hotel_link_layer(owner_name,owner_no) { var opt = {url:'/map/direct_link.php?owner_name='+owner_name+'&owner_no='+owner_no,title:arr_lang['36'],width:900,height:600}; // 지도 parent.overlay_win_open(opt); } //------------------------- // 골프장 - 호텔 길 찾기 //------------------------- function show_single_direction_layer(from,to) { var opt = {url:'/map/single_direction.php?from='+from+'&to='+to,title:arr_lang['865'],width:900,height:600}; // 길 찾기 parent.overlay_win_open(opt); } var overlay_win_opt = null; //------------------------------------------------- // 지도 인포윈도우의 상세보기 메뉴 클릭 시 호출됨 //------------------------------------------------- function infowin_view_detail_click(trigger,owner_name,owner_no) { overlay_win_open({url:'/map/'+owner_name+'_view_detail.php?'+owner_name+'_no='+owner_no,width:900,height:600}); } //------------------------------------------------- // 지도 인포윈도우의 즐겨찾기 메뉴 클릭 시 호출됨 //------------------------------------------------- function favorite_click(trigger,todo,owner_name,owner_no) { $.post('/common/favorite.php',{todo:todo,owner_name:owner_name,owner_no:owner_no},function(r) { if(r == 200) alert(arr_lang['1306']); // 추가되었습니다. else alert(arr_lang['1307']+'\n'+arr_lang['687']); // 정상적으로 처리되지 않았습니다.\n잠시 후 다시 시도해 주세요. }); } //--------------------------------------------------------------- // 트립 플래너 > POI 검색하기 레이어 창에서 항목 선택 시 호출됨 //--------------------------------------------------------------- function poi_search_select(trigger,fromto,owner_name,owner_no,owner_title) { overlay_win_close(); frames['sidebar_iframe'].poi_search_select(fromto,owner_name,owner_no,owner_title); } //-------------------------------------------------------------------------------- // 트립 플래너 > 지도에서 찾아보기 레이어 창(인포윈도우)에서 항목 선택 시 호출됨 //-------------------------------------------------------------------------------- function map_search_select(trigger,fromto,owner_name,owner_no,owner_title) { overlay_win_close(); frames['sidebar_iframe'].map_search_select(fromto,owner_name,owner_no,owner_title); } //----------------- // 레이어 창 열기 //----------------- function overlay_win_open(opt) { overlay_win_opt = opt; $('#overlay_win_container').remove(); $('body').append('
'); $('#overlay_win_screen').click(overlay_win_close); var url = opt.url; var w = opt.width ? opt.width : 640; var h = opt.height ? opt.height : 480; $('body').append('
' +'' +'' +'' +'' // 창 닫기 +'' +'
'+arr_lang['1305']+' ' // 로드 중 +''+arr_lang['363']+'
' +'' +'
'); $('#overlay_win_container').locationcenter(); $('#overlay_win_container').draggable(); } function overlay_win_resize(opt) { $('#overlay_win_container').css({'width':opt.width,'height':opt.height}); $('#overlay_win_container_iframe').css({'width':opt.width-20,'height':opt.height-50}); $('#overlay_win_container').locationcenter(); } //----------------------------------------------- // 레이어 창의 iframe에서 onload 발생 시 호출됨 //----------------------------------------------- function overlay_win_onload() { document.getElementById('ttl_overlay_win').innerHTML = overlay_win_opt.title ? overlay_win_opt.title : 'Travelomap'; document.getElementById('img_loading_overlay_win').style.display = 'none'; } //----------------- // 레이어 창 닫기 //----------------- function overlay_win_close() { $('#overlay_win_container').draggable('destroy'); $('#overlay_win_container').remove(); $('#overlay_win_screen').remove(); } //window.onload = on_load; window.onresize = on_resize; window.onunload = on_unload;