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 = ''
+'';
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('');
$('#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;