var S_HTM = "<div style=\"position:absolute;width:29px;height:68px;padding-top:6px;background:url('../img/traffic/fast/icon_start.gif') no-repeat; z-index:9999; text-indent:-2000em;\"></div>";
var E_HTM = "<div style=\"position:absolute;width:29px;height:68px;padding-top:6px;background:url('../img/traffic/fast/icon_arrival.gif') no-repeat; z-index:9999; text-indent:-2000em;\"></div>";
//환승마커
var T_HTM = "<div style=\"position:absolute;width:29px;height:68px;padding-top:6px;background:url('../img/traffic/fast/icon_transfer.gif') no-repeat; z-index:9999; text-indent:-2000em;\"></div>";
//종점마커
var B_HTM = "<div style=\"position:absolute;width:29px;height:68px;padding-top:6px;background:url('../img/traffic/fast/icon_laststop.gif') no-repeat; z-index:9999; text-indent:-2000em;\"></div>";

var tmpPoi = {x:"", y:"", name:"", zoom:false};
var oldCid = {sCid:"", eCid:""};
var TAB = {ROUTE:"route", BUS:"bus", METRO:"metro"};
var LINE_COLOR = {BUS1:"#0092AA", BUS2:"#5964C9", BUS11:"#0063BC", 
	BUS12:"#1C9100", BUS13:"#EFAB00", BUS14:"#E50B00", METRO1:"#004BA5", 
	METRO2:"#0D8900", METRO31:"#0D8900", METRO51:"#0D8900", METRO72:"#0D8900",
	METRO3:"#DD8300", METRO71:"#DD8300", METRO4:"#007999", METRO5:"#103775",
	METRO6:"#CC5200", METRO73:"#CC5200", METRO7:"#8E9100", METRO8:"#D8006C", 
	METRO41:"#D8006C", METRO100:"#F4AE00", METRO21:"#004D99", METRO101:"#006CC4"};

var CONV_AREA = {"11":"1000", "28":"2000", "41":"1", "11,28,41":"1", "26":"7000",
	"27":"4000", "29":"5000", "30":"3000", "31":"6000"};
var CONV_NAME = {"1000":"서울시", "2000":"인천시", "1":"수도권", "7000":"부산시",
	"4000":"대구시", "5000":"광주시", "3000":"대전시", "6000":"울산시"};
var CONV_TAREA = {"1000":"11", "2000":"28", "1":"11,28,41", "7000":"26",
    "4000":"27", "5000":"29", "3000":"30", "6000":"31"}; 
var METRO_NAME_EXIST = {"NONE":"0", "START":"1","END":"2","BOTH":"3"};

var CLICK_MSG = "위치를 클릭하세요.";
var NOPOI_MSG = "해당 지명 없음";
var DEFAULT_AREANAME = "현재지역";
var DEFAULT_LEVEL = 4;
var POI_LEVEL = 1;

var layerName = "S";
var idx = 0;
var lastIdx = 1;
var tabIdx = 1;

var SMarker;
var EMarker;
var TMarkers = [];
var BMarkers = [];
var PMarker;	//대중교통
var pointMarker;
var clickFlag = false;
var markerIcon = new OIcon (null, null, new OPoint (0, 68));
var mapPolylines = [];

var cObj = document.getElementsByName("cLayer"); 
var sObj = document.getElementsByName("sLayer"); 
var tObj = document.getElementsByName("txtPoi");

var map;
var mapbound;
var sCodeL = "";
var curTabName = TAB.ROUTE;
var cId="1";
var curStationInfo;
var oldStationInfo;
var oldCenter;

var isFadeIn = false;
var station_x = ""; 
var station_y = "";
var samestation = 1;
var swfname = "sa";

var infoHtml = 
		'<div class="LayerBox" style="display:none;" id="routeDetail">' +
			'<div class="BorderBox" style="width:700px;">' +
				'<div class="BorderBoxIn" style="padding:10px 16px 7px 16px;">' +
				'<div id="routeDetailData">' +
				'</div>' +
			'</div>' +
			'<span class="closeBtn"><a href="javascript:closeDetail();"><img src="http://map.cyworld.com/img/button/btn_close03.gif" width="14" height="13" alt="닫기"></a></span>' +
			'<b class="roundedDiv tl"></b><b class="roundedDiv tr"></b><b class="roundedDiv bl"></b><b class="roundedDiv br"></b>' +
			'</div>' +
		'</div>';
		
var infoMargin = {x:8, y:8};

function makeMap(x, y, zoom) {
	map = new OpenMap($("show_map"), null, null, $("navi_map"));

	map.enableWheelZoom();
	map.addControl(new OSliderControl($("navigation_right")));

	OEvent.bindDom(window, "resize", this, this.resizeMap);
	OEvent.addListener(map, "move", resetInfoDiv);
	OEvent.addListener(map, "zoomchanged", refreshMove);
	OEvent.addListener(map, "movestart", disabledRefresh);
	OEvent.addListener(map, "moveend", enabledRefresh);	
	
	map.enableContextMenu();
	OEvent.addListener(map, "click", function(overlay, point) {
		if (point) {
			if (map.ctxMenu) {
				map.removeOverlay (map.ctxMenu);
			}
			if(map.contextable) {
				layerName = "P";
				searchClick(point);

				map.ctxMenu = new OCtxMenu(point, P_HTM, false);
				map.addOverlay (map.ctxMenu);
			} else {
				if(clickFlag) {
					searchClick(point);
					clickFlag = true;									
				}
			}
		}
	});
	mapbound = map.getBoundsLatLng();
	resizeMap();
  map.centerAndZoom(new OPoint(x, y), zoom);	

	var obj = document.createElement("DIV");
	obj.id = "transInfoDiv";
	obj.style.position = "absolute";
	obj.innerHTML = infoHtml;
	obj.style.zIndex = 30;
	obj.style.left = px(infoMargin.x);
	obj.style.top = px(infoMargin.y);

  map.markerPane.appendChild(obj);
  
  OEvent.bindDom(obj, "mousedown", obj, stopEvent);
	OEvent.bindDom(obj, "dblclick", obj, stopEvent);
  resetInfoDiv();
  naviFlag = true;
}

function stopEvent(a) {
	OEvent.stop(a);	
}

function resetInfoDiv() {
	var obj = $("transInfoDiv");
	var x = parseInt(obj.style.left);
	var y = parseInt(obj.style.top);

	x = infoMargin.x + parseInt(map.div.style.left) * -1;
	y = infoMargin.y + parseInt(map.div.style.top) * -1;

	obj.style.left = px(x);
	obj.style.top = px(y);
}
	
function resizeMap() {
	if (curTabName != TAB.METRO) {
		map.fitMapWindow();
		map.resizeMapView();
	}

	if (bIE) {
		var w = document.body.clientWidth - $("leftColTd").width - 10;
		//$("show_metro").style.width = px(w);
	}
}

function refreshMove () {
    if($("show_flash").style.display =="none") {
	  	var newBound = map.getBoundsLatLng();
	
	  	if (mapbound.minX == newBound.minX) return;
	
		if (map.infoWindow) {
			if (!((mapbound.minX >= newBound.maxX || mapbound.maxX <= newBound.minX) ||
					(mapbound.minY >= newBound.maxY || mapbound.maxY <= newBound.minY))) {
				return;
			}
		}
		
		bound();
		mapbound = newBound;
	}
}

function doSearch(obj, flag) {
	var params = null;
	var zoom_level = map.getZoomLevel();

	if (!isBlank(obj)) {
		alert ('검색어를 입력하세요.');
		obj.focus();
		return;
	}
	
	hideSuggestDiv(obj.id);
	var searchparam = obj.value;
	if(searchparam.length > 10) searchparam = obj.value.substring(0, 10);
	setTimeout(function() { search(searchparam, flag) }, 10);
}

function setAreaNavi(areaCode, areaName, isTraffic, isDontMoveCenter) {

	var convCode = CONV_AREA[areaCode];
	if (isTraffic) 
		toggleMiniDiv('sel_traffic', 'traffic_sel');
	else 
		toggleMiniDiv('sel_minimap', 'navi_sel');
	
	if(convCode) {
		var areaCodes = String(areaCode).split(",");
		$("trafficNaviText").innerHTML = areaName;
		$("areaNaviText").innerHTML = areaName;
		
		if (areaCodes[0] == "") return;
		if(curTabName != TAB.METRO) {
			var center = regionSet.get(areaCodes[0]);
            if (isDontMoveCenter){
            }
            else{
				map.centerAndZoom (new OPoint(center.x, center.y), map.getZoomLevel());
            }
		} else {
			showMetroArea(convCode);
			oldCenter = regionSet.get(areaCodes[0]);
						
			$("txtSubwayStart").value="";
			$("txtSubwayEnd").value="";
			$("sSearchResultLayer").style.display="none";
			$("eSearchResultLayer").style.display="none";
		}
		cId = convCode;
	} else {
		$("areaNaviText").innerHTML = areaName;
		if(areaCode) {
			var center = regionSet.get(areaCode);
			map.centerAndZoom (new OPoint(center.x, center.y), map.getZoomLevel());
			cId = "0";
		}
	}
	sCodeL = areaCode;
}

function showMetroArea(convCode) {
	swfname = "sa";
	switch (convCode) {
		case "3000": 
			swfname = "ja";
			break;
		case "4000": 
			swfname = "da";
			break;
		case "5000": 
			swfname = "ga";
			break;
		case "7000": 
			swfname = "ba";
			break;
		case "6000": 
			swfname = "sa";
			alert("울산에는 지하철 정보가 없습니다.");
			break;
	}

	if (bIE) {
		$("swlsa").LoadMovie(0, "../img/traffic/swf/swl"+swfname+".swf?" + "&temp="+ Math.random() );

		$("swlsa").Play();
	} else {
		var embedTag = $("swlsa").getElementsByTagName("embed")[0];
		if(embedTag) {
			embedTag.setAttribute("src","../img/traffic/swf/swl"+swfname+".swf");
		}

		$("show_metro").innerHTML = $("show_metro").innerHTML;
	}
}

function goTab(tabName) {
	curTabName = tabName;
	closeRouteResult();
	ajaxSyncSend('/traffic/traffic.map', 'cmd=tab&tabName=' + tabName, function (res) {
		//탭 이미지 세팅
		$("routeTab").src = "/img/traffic/fast/leftmenu01_off.gif";
		$("busTab").src = "/img/traffic/fast/leftmenu02_off.gif";
		$("metroTab").src = "/img/traffic/fast/leftmenu03_off.gif";
		
		$('divlefttabIn').innerHTML = res.responseText;
		closeDetail();
		closeInfoWindow();
		unloadMarker();
	
		//지하철 탭 초기화
		$("printWrapDiv").innerHTML = "";
		$("printWrapDiv").style.display = "none";
		
		//설정지역 초기화
		oldCid = {sCid:"", eCid:""};
		tmpPoi = {x:"", y:"", name:"", zoom:false};
		
		switch(tabName) {
			case TAB.ROUTE:
				ndrClick("traffic_find", "N");
				$("routeTab").src = "/img/traffic/fast/leftmenu01_on.gif";
				initSuggestEvent('txtTrafficStart');
				initSuggestEvent('txtTrafficEnd');
				mapTabBound();
				break;
			case TAB.BUS:
				ndrClick("traffic_bus", "N");
				$("busTab").src = "/img/traffic/fast/leftmenu02_on.gif";
				initSuggestEvent('txtBusStation');
				mapTabBound();
				break;
			case TAB.METRO:
				ndrClick("traffic_sub", "N");
				oldCenter = map.getCenterLatLng();
				
				$("metroTab").src = "/img/traffic/fast/leftmenu03_on.gif";
				initSuggestEvent('txtSubwayStart');
				initSuggestEvent('txtSubwayEnd');
				showMetroArea(cId);
				$("show_map").style.display = "none";
				$("show_flash").style.display = "block";
				break;
			default:break;
		}	
	});
}

function mapTabBound() {
 	$("show_flash").style.display = "none";
	$("printWrapDiv").style.display = "none";
	$("show_map").style.display = "block";
	
	if(oldCenter) {
		map.centerAndZoom(oldCenter, map.getZoomLevel());
		oldCenter = null;
	}
	resizeMap();	
	bound();
}

function setSearchFlag(val) {
	var rdo = document.getElementsByName('rdoTraffic');
		for (i=0; i<rdo.length; i++) {
			if (rdo[i].value == val) rdo[i].checked = true;
		}
}

function getSearchFlag() {
	var rdo = document.getElementsByName('rdoTraffic');
	for (i=0; i<rdo.length; i++) {
		if (rdo[i].checked) return rdo[i].value;
	}
}

var isSendable= false;
function clickRecentRoute(routeId) {
	naviToggle (false);
	if (curTabName != TAB.ROUTE) {
		goTab(TAB.ROUTE);
	}
	setRecentRoute(routeId);
}

function setRecentRoute(routeId) {
	
	oldCid = {sCid:"", eCid:""};
	setSearchFlag($('searchFlag' + routeId).value);
	
	isSendable= true;
	layerName = "S"	;
	goPoi($('recentStartX' + routeId).value, $('recentStartY' + routeId).value,  $('recentStartName' + routeId).value, true, true);
	if(isSendable) {
		layerName = "E";
		goPoi($('recentEndX' + routeId).value, $('recentEndY' + routeId).value, $('recentEndName' + routeId).value, true, true);
		var maxX = Math.max($('recentStartX' + routeId).value, $('recentEndX' + routeId).value);
		var maxY = Math.max($('recentStartY' + routeId).value, $('recentEndY' + routeId).value);
		var minX = Math.min($('recentStartX' + routeId).value, $('recentEndX' + routeId).value);
		var minY = Math.min($('recentStartY' + routeId).value, $('recentEndY' + routeId).value);
		fullLane(minX, minY, maxX, maxY);
		//경로 검색 수행
		routeSearch();
	}
}

function mapClick(flag) {
	toggleRoute (flag, 'c');
	tObj[idx].innerHTML = CLICK_MSG;
	clickFlag = true;
}

function searchClick(point) {
	pointMarker = new OPoint (bessel(point.x), bessel(point.y));

	var params;
	params = "&cmd=clickSearchPoi&x_coord=" + pointMarker.x + "&y_coord=" + pointMarker.y;
	ajaxSend("/traffic/search.map",params, showClick);
}

function showClick(res) {
	var val = trim(res.responseText);
	var parseObj = JSON.parse(val);
	if (parseObj.Search_dong && parseObj.Search_dong.success == 1) {
		goPoi(pointMarker.x, pointMarker.y, parseObj.Search_dong.gu + " " + parseObj.Search_dong.hdong, true);
	} else if (parseObj.PoiX && parseObj.PoiX && parseObj.PoiName) {
		goPoi(pointMarker.x, pointMarker.y, parseObj.PoiName, true);
	} else {
		goPoi(pointMarker.x, pointMarker.y, NOPOI_MSG, true);
	}
}

function routeSearch() {
	if (!isBlank($("sx"))) {
		alert ('출발지를 선택하세요.');
		
		if (sObj[idx].style.display != "none") {
			$("txtTrafficStart").focus();
		}
		return;
	}
	
	if (!isBlank($("ex"))) {
		alert ('도착지를 선택하세요.');
		
		if (sObj[idx].style.display != "none") {
			$("txtTrafficEnd").focus();
		}
		return;
	}
	
	closeDetail();
	fadeInAllScreen();
	isFadeIn = true;
	
	showCenterInfoDiv("searching_Div", -105, -50);
    
	var sId = getSearchFlag();
	if (sId == 'B'){
		sId = '2';
	} else if (sId == 'M'){
		sId = '1';
	} else {
    	sId = '4';
	}
	$("sSearchResultLayer").style.display='none';
    $("eSearchResultLayer").style.display='none';
    
	var params = "cmd=route";
	params += "&sx=" + $("sx").value + "&sy=" + $("sy").value + 
		"&ex=" + $("ex").value + "&ey=" + $("ey").value + 
		"&sId=" + sId + "&cId=" + cId;
	
	ajaxSend("/traffic/search.map",params, showRoute);
}

function cancelRouteSearch() {
   	if(isFadeIn) {
		fadeOutAllScreen();
		isFadeIn = false;
	}
	$("searching_Div").style.display = "none";
}

function showRoute(res) {
    var hasOnlyStatImg = false;
    var resText = trim(res.responseText);
    if (resText.indexOf('<img id="statImg"')==0) hasOnlyStatImg = true;

	if(resText.length == 0 || hasOnlyStatImg){
		cancelRouteSearch();
		alert("해당 조건에 맞는 대중교통 경로가 없습니다. 출발지 혹은 도착지를 다시 선택해주세요.");
		return;
	}
	$("searching_Div").style.display = "none";
  $('routeResultLayer').innerHTML = res.responseText;
  $("routeResultLayer").style.display='block'; 
			
	clickFlag = false;
	unloadMarker();
	
	//최근검색 경로 추가
	params = "cmd=saveRecentRoute";
	params += "&route_id=" + $("updateRecentId").value + "&search_flag=" + getSearchFlag();
	params += "&start_x=" + $("sx").value + "&start_y=" + $("sy").value + "&start_name=" + encodeURIComponent($("sName").value);
	params += "&end_x=" + $("ex").value + "&end_y=" + $("ey").value + "&end_name=" + encodeURIComponent($("eName").value);

	ajaxSend("/traffic/userpoint.map", params, function (res) {
		$('recentRouteLayer').innerHTML = res.responseText;
	});
	showRouteDetail(1);
}

function unloadMarker( uMFlag ) {
	if (SMarker) map.removeOverlay (SMarker);
	if (EMarker) map.removeOverlay (EMarker);

	for(i=0; i<mapPolylines.length; i++) {
		map.removeOverlay (mapPolylines[i]);		
	}
	mapPolylines = [];
	
	for(i=0; i<TMarkers.length; i++) {
		map.removeOverlay (TMarkers[i]);		
	}
	TMarkers = [];
	
	for(i=0; i<BMarkers.length; i++) {
		map.removeOverlay (BMarkers[i]);		
	}
	BMarkers = [];
	
	var n = map.markers;	
	
	if (!uMFlag && n) {
		var obj;
		for (i = 0; i < n.length; i++) {
			obj = n[i];
			map.removeOverlay(obj);
		}
	}
}

function toggleRoute(cmd, flag) {
	if (cmd == "S") {
		idx = 0;
		$("eSearchResultLayer").style.display='none';
	} else if (cmd == "E") {
		idx = lastIdx;
		$("sSearchResultLayer").style.display='none';
	}
	map.disableContextMenu();

	if (flag == "c") {
		sObj[idx].style.display = "none";
		cObj[idx].style.display = "block";
	} else {

		sObj[idx].style.display = "block";
		cObj[idx].style.display = "none";
		
		if (cmd == "S") {
			oldCid.sCid = "";
			$("txtTrafficStart").value = "";
			$("sx").value = "";
			map.removeOverlay(SMarker);
		} else if (cmd == "E") {
			oldCid.eCid = "";
			$("txtTrafficEnd").value = "";
			$("ex").value = "";
			map.removeOverlay(EMarker);
		}
		sCodeL = "";
		
		clickFlag = false;
		map.enableContextMenu();		
	}
	
	layerName = cmd;
}
var isEqualStartEnd = false;
function goPoi(x, y, name, noZoom, isASync) {
	tmpPoi= {x:x, y:y, name:name, zoom:noZoom};
	if(x == "") {
		toggleRoute(layerName, 's');
		return;
	}
	if((layerName == "S" && $("ex").value == x && $("ey").value == y) 
		|| (layerName == "E" && $("sx").value == x && $("sy").value == y)) {
		alert("출발지와 도착지가 같습니다.");
		isEqualStartEnd = true;
		return;
	}
	isEqualStartEnd = false;

	//가능 지역 체크
	var pt = new OPoint(x, y);
	param = "cmd=routeArea&x=" + pt.x/10 + "&y=" + pt.y/10;
	if(isASync) {
		ajaxSyncSend("/addon/dong.map", param, setTrafficPoi);
	} else {
		ajaxSend("/addon/dong.map", param, setTrafficPoi);
	}
}

function setTrafficPoi (res) {
	var convCode;
	var lCode = "";
	var zoomLev = DEFAULT_LEVEL;
	if (res) {
  		var result = JSON.parse(res.responseText);
		if (result.Search_dong.success == "1") {
			lCode = result.Search_dong.hcode.substring(0,2);
			convCode = CONV_AREA[lCode];
		}			
	}

	if(convCode) {
		x = tmpPoi.x;
		y = tmpPoi.y;
		name = tmpPoi.name;
		noZoom = tmpPoi.zoom;

		if (layerName == "P") {
			$("px").value = x;
			$("py").value = y;
			$("pName").value = name;
		} else if(layerName != ""){
			
			if(convCode == CONV_AREA["28"]) convCode = CONV_AREA["11,28,41"];
			else if(convCode == CONV_AREA["11"]) convCode = CONV_AREA["11,28,41"];
			
			if((oldCid.sCid != "" && layerName == "E" && oldCid.sCid != convCode) ||
				(oldCid.eCid != "" && layerName == "S" && oldCid.eCid != convCode)) {
				alert("출발지와 도착지는 같은 지역에서 선택해주세요.");
				return ;
			} else {
				var obj = eval(layerName + "Marker");
				if (obj) map.removeOverlay(obj);
				var oPoint = new OPoint (-5, 68);
	
				toggleRoute (layerName, 'c');
				tObj[idx].innerHTML = name;
				
				var html = eval(layerName + "_HTM");
				var icon = new OIcon (null, null, oPoint);
				obj = new OMark(new OPoint(x, y), {icon:icon});
				obj.iconHtml = html;
				obj.iconHtmlMode = true;
				map.addOverlay(obj);
			
				if (layerName == "S") {
					oldCid.sCid = convCode;
					SMarker = obj;
					$("sx").value = x;
					$("sy").value = y;
					$("sName").value = name;
				} else if (layerName == "E") {
					oldCid.eCid = convCode;	
					EMarker = obj;
					$("ex").value = x;
					$("ey").value = y;
					$("eName").value = name;
				}
				$("trafficNaviText").innerHTML = CONV_NAME[convCode];
				$("areaNaviText").innerHTML = CONV_NAME[convCode];
				cId = convCode;
				sCodeL = lCode;
			}
		} 

		if (!noZoom) goMap(x, y);
		isSendable= true;
	} else {
		alert("대중교통 서비스를 사용할 수 없는 지역입니다.");
		isSendable= false;
	}
}


var showIdx = 0;
function busInfo(bId, idx) {
	showIdx = idx;
	ajaxSend('/traffic/search.map', 'cmd=info&type=B&id=' + bId, showBusInfo);
}

function showBusInfo(res) {
	$("businfo_" + showIdx).innerHTML = res.responseText;
}
var detailWnd;
function busDetail(bId, isMetro) {
	var url = "/traffic/search.map?cmd=busDetail" + "&bId=" + bId + "&cId=" + cId + "&printable=true" + "&isMetro=" + isMetro;
	var prop = 'scrollbars=no, resizable=no';
	detailWnd = openWindow(url,"b_detail", 450, 340, prop);
}

function metroInfo(sId, idx) {
	showIdx = idx;
	ajaxSend('/traffic/search.map', 'cmd=info&type=M&sId=' + sId, showMetroInfo);
}

function showMetroInfo(res) {
	$("metroinfo_" + showIdx).innerHTML = "";
	$("metroinfo_" + showIdx).innerHTML = res.responseText;
}

function metroDetail(tabName, sId, redirectTab) {
	if(!sId || sId == "undefined") {alert("환승역의 정보는 추후에 지원됩니다."); return;}
    var url = "/traffic/search.map?cmd=metroDetail&tabName=" + tabName + "&sId=" + sId + "&cId=" + cId + "&printable=true";
    if(redirectTab) url += "&redirectTab=" + redirectTab;
    var prop = 'scrollbars=no, resizable=no';
    openWindow(url,"m_detail", 600, 400, prop);
}

function search(val, flag) {
	var pars = "cmd=search&keyword=" + val + "&cId=" + cId + "&type=" + getSearchFlag() + "&areaCodeLarge=" + sCodeL + "&curTabName=" + curTabName;
	var resultFunc = "";
	var loadingHTML = "<p class=\"loading\"><img src=\"/img/loading.gif\" width=\"16\" height=\"16\" alt=\"Loading\" /></p>";
	
	if(flag == "S") {
		pars += "&flag=S"; 
		resultDiv = "sSearchResultLayer";
		sugDiv = "txtTrafficStartResultLayer";
		$("eSearchResultLayer").style.display='none';
	} else if(flag == "E") {
		pars += "&flag=E"; 
		resultDiv = "eSearchResultLayer";
		sugDiv = "txtTrafficEndResultLayer";
		$("sSearchResultLayer").style.display='none';
	} else if(flag == "MS") {
		pars += "&flag=S"; 
		resultDiv = "sSearchResultLayer";
		sugDiv = "txtSubwayStartResultLayer";
		$("eSearchResultLayer").style.display='none';
	} else if(flag == "ME") {
		pars += "&flag=E"; 
		resultDiv = "eSearchResultLayer";
		sugDiv = "txtSubwayEndResultLayer";
		$("sSearchResultLayer").style.display='none';
	} else if(flag == "B") {
		resultDiv = "bSearchResultLayer";
		sugDiv = "txtBusStationResultLayer";
		$("nSearchResultLayer").style.display='none';
	} else if(flag == "N") {
		pars = "cmd=busnumber&TEXT=" + val + "&CID=" + cId;
		resultDiv = "nSearchResultLayer";	
		$("bSearchResultLayer").style.display='none';	
		loadingHTML = "<p class=\"loading\" style=\"height:126px;\"><img src=\"/img/loading.gif\" width=\"16\" height=\"16\" alt=\"Loading\" style=\"margin-top:50px;\"/></p>";
	}
    
    $(resultDiv).innerHTML = loadingHTML;
	ndrClick ("/traffic/home.map", "N");
    $(resultDiv).style.display='block';
        
	ajaxSend("/traffic/search.map", pars, function (res){
		$(resultDiv).innerHTML=res.responseText;
		$(resultDiv).style.display='block';
	});
	if(flag != "N") setTimeout(function(){$(sugDiv).style.display='none';}, 100);
}

function bound() {
	station_x = ""; 
	station_y = "";
	samestation = 1;
	closeInfoWindow();
	if(map.getZoomLevel() > 2){
		if (map.markers != null){
			map.unloadPage();
		}
		return;
	}
	var bp = map.getBoundsLatLng();
	var params = "cmd=bound&type=" + getSearchFlag() + "&sx_coord=" + bp.minX 
		+ "&ex_coord=" + bp.maxX + "&sy_coord=" + bp.minY + "&ey_coord=" + bp.maxY;

	showCenterInfoDiv("loading_Div", -105, -50);
	ndrClick ("/traffic/home.map", "N");
	ajaxSend("/traffic/search.map", params, showBound);
}

function showBound(res) {
	$("stationList").innerHTML = res.responseText;
	if ($("totCnt").value != "0") {
		evalScriptsByName("stationScripts");
		mapLoad();
	}
	//지하철 이전, 다음역 함수가 있을 때 실행하고 초기화
	if(moveToStationFunc !="") {moveToStationFunc.call();}
	moveToStationFunc = "";
	$("loading_Div").style.display = "none";		
}

function showStationDetail(idx) {
	if (!window.r_vCount) return;
	var sid = window.r_vCount;
	map.markers[sid].html = "";
	map.markers[sid].html = $("stationInfo_"+sid).innerHTML;
	map.showInfoWindow(sid);
}

function chkValue(obj){
	var tmp=obj.value;
	var len=tmp.length;
	if (len!=0){
		if ((tmp.match(/^[0-9]{1, 5}$/)==null)){
			alert("버스 번호를 입력하세요.");
			obj.value="";
			obj.focus();
			return false;
		}else {
		    obj.value=tmp;
		    return true;
		} 
	}
}

var isPopupClose = false;
function showBusLane(bId, isClose) {
	var pars = "cmd=busLane&bId=" + bId;
	isPopupClose = isClose;
	ajaxSend("/traffic/search.map", pars, drawBusLane);
}

function drawBusLane(res) {
	if(map.infoWindow) map.infoWindow = null;;
	unloadMarker()
	$("mapPolyline").innerHTML = "";
	$("mapPolyline").innerHTML = res.responseText;
	evalScriptsByName("busLaneScripts");
	if(isPopupClose && detailWnd) {
		window.setTimeout(function(){
			detailWnd.close();
			detailWnd = null;
		}, 10);
	}
}

function showRouteLane(idx) {
	if(isFadeIn) {
		closeMPNLayer();
		closeEditMPLayer();
	}
	var sx = Math.floor($("rSx_" + idx).value);
	var sy = Math.floor($("rSy_" + idx).value);
	var ex = Math.floor($("rEx_" + idx).value);
	var ey = Math.floor($("rEy_" + idx).value);
	var mapObj = encodeURIComponent($("mapObjData_" + idx).value);
	
	var pars = "cmd=routeLane&mapObj=" + mapObj 
		+ "&sx=" + sx + "&sy=" + sy +"&ex=" + ex + "&ey=" + ey;
		
	showCenterInfoDiv("searching_Div", -105, -50);
	ajaxSend("/traffic/search.map", pars, drawRouteLane);
}	

function drawRouteLane(res) {
	unloadMarker( true );
	$("mapPolyline").innerHTML = "";
	$("mapPolyline").innerHTML = res.responseText;
	evalScriptsByName("routeLaneScripts");
	
	fadeOutAllScreen();
	isFadeIn = false;
	$("searching_Div").style.display = "none";
}

function resetStation() {
	goPoi(oldStationInfo.x, oldStationInfo.y, oldStationInfo.name, true);
	if (oldStationInfo.x == "") toggleRoute(layerName, "s");
	closeStationLayer();
}

function closeStationLayer() {
	$("searchRouteMsgLayer").style.display = "none";
	$("setRouteMsgLayer").style.display = "none";
	if(isFadeIn) {
		fadeOutAllScreen();
		isFadeIn = false;
	}
}

function searchRoute() {
	closeStationLayer();
	routeSearch();
}

function setGoStation(isStart) {
	closeInfoWindow();
	if(curStationInfo == null) return;

	var cText = "출발지";
	var nText = "도착지";
	var isRoute = false;
	var idx = curStationInfo.idx;
	curStationInfo.isStart = isStart;
	oldStationInfo = {x:"", y:"", name:""};
	if (!isStart) {
		cText = "도착지";
		nText = "출발지";
		oldStationInfo = {x:$("ex").value, y:$("ey").value, name:$("eName").value};
		layerName = "E";
		goPoi(curStationInfo.x, curStationInfo.y, curStationInfo.name, true, true);
	} else {
		oldStationInfo = {x:$("sx").value, y:$("sy").value, name:$("sName").value};
		layerName = "S";
		goPoi(curStationInfo.x, curStationInfo.y, curStationInfo.name, true, true);
	}
	
	isRoute = isBlank($("sx")) && isBlank($("ex"));

	var curDivName	= "searchRouteMsgLayer";
	if(!isEqualStartEnd) {
		if (isRoute) { 
			$("searchRouteMsgText").innerHTML = "정류장 (지하철역)이 " + cText + "로 설정되었습니다.<br />"
					+ "(취소하시면 " + cText + "가 재설정 됩니다.)";
		} else {
			$("setRouteMsgText").innerHTML = "정류장 (지하철역)이 " + cText + "로 설정되었습니다.<br />"
					+ nText + "를 설정해주세요.<br />" 
					+ "(취소하시면 " + cText + "가 재설정됩니다.)";
			curDivName = "setRouteMsgLayer";
		}
		fadeInAllScreen();
		isFadeIn = true;
		showCenterInfoDiv(curDivName, -150, -200);
	}
}

function setStation(isStart) {
	if (curTabName != TAB.ROUTE) {
		 goTab(TAB.ROUTE);
	} 
	setGoStation(isStart);
}

function closeDetail() {
	if($("routeDetail")) {
		$("routeDetail").style.display = "none";
		$("routeDetailData").innerHTML = "";
	}
}

function showRouteDetail(idx) {
	closeMPNLayer();
	
	if (!isFadeIn) {
		fadeInAllScreen();
		isFadeIn = true;
	}
	
	$("routeDetailData").innerHTML = $("routeData" + idx).innerHTML;
	if($("routeDetail")) $("routeDetail").style.display = "block";
	
	showRouteLane(idx);
}

function morePoi(clickFlag, lCode, keyword) {
	var url = "/traffic/search.map?cmd=more&printable=true&areaCodeLarge=" 
		+ lCode + "&keyword=" + encodeURIComponent(keyword) + "&clickFlag=" + clickFlag;
    var prop = "scrollbars=no, resizable=no";
    openWindow(url,"detail", 450, 286, prop);
}

function fullLane(minX, minY, maxX, maxY){
	var dty = 0;
	var gap = 0;
	if(trim($("routeDetailData").innerHTML) != "") {
		dty = document.getElementById("routeDetail").clientHeight / 2;
		gap = Math.floor((maxY - minY)/2);
	}
	var level = POI_LEVEL;
	var mapWidth = map.viewSize.width - dty;
	var mapHeight = map.viewSize.height - dty;
	for (i = level;i <= map.spec.zoomLevel;i++) {
    	width = map.spec.getBitmap(Math.abs(maxX - minX), i);
    	height = map.spec.getBitmap(Math.abs(maxY - minY), i);
    
    	if ((width + 50) <= mapWidth && height <= mapHeight) {
    		level = i;
    		break;
    	}
    }
	
    map.centerAndZoom (new OPoint(Math.floor((maxX + minX)/2), Math.floor((maxY + minY)/2) + gap), level);
}

//지하철 역, 혹은 정류장 정보를 초기에 보여줄 때 사용하는 변수
var showSID = "";
var showCID = "";

var moveToStationID = "";
var moveToStationFunc = "";
//지하철, 다음역, 이전역 이동 함수
function showStationById( id ){
	moveToStationID = id;
	var url = "/traffic/search.map";
	var pars = "cmd=StationXY&sId=" + id + "&cId=" + cId;
	ajaxSend(url, pars, setMetroByid);
}

function setMetroByid (res) {
	$("scriptDiv").innerHTML="";
	$("scriptDiv").innerHTML=res.responseText;
	evalScriptsByName("metroScripts");
}

function moveStation(x, y){
	closeInfoWindow();
	map.centerAndZoom (new OPoint(x, y), map.getZoomLevel());
	refreshMove();
}

function goMap(x, y) {
	map.centerAndZoom (new OPoint(x, y), POI_LEVEL);
}

function goStation(id, x, y, name, lName) {
	if(curTabName == TAB.METRO){
		if(lName == "S") $("txtSubwayStart").value = name;
		else if(lName == "E") $("txtSubwayEnd").value = name;
		setMetroStation(name, id, lName);
	} else {
		layerName = lName;
		closeInfoWindow();
		if(lName == "") moveToStationID = id;
		goPoi(x, y, name, false);
	}
}

function closeInfoWindow() {
	if(map.infoWindow) {
		map.closeInfoWindow();
	}
}

function chkNotyOpen(tparam){
	setCookie ("trafficparam", tparam, tparam, "/", "map.cyworld.com");
	$("trafficNotice").style.display = "none";
}

function closeRouteResult() {
	$("routeResultLayer").innerHTML = "";
	$("routeResultLayer").style.display = "none";
	closeDetail();
	unloadMarker( true );
}

function swlsa_DoFSCommand(command, args) {
  if (command == "CallPathInfo") {
	CallPathInfo(args);
  } else if(command == "CallAllLane") {
    CallAllLane(args);
  } else if(command == "CallStnInfo") {
    CallStnInfo(args);
  } else if(command == "CallStnTime") {
    CallStnTime(args);
  } else if(command == "CallSelStn") {
  	CallSelStn(args);
  }
}

function CallStnTime(SID) {
	metroDetail('', SID, 2);
}

function CallSelStn(param) {
	var params = param.split("#");
	if (params[0] == 0) {
		$("txtSubwayStart").value = params[1];
	} else {
		$("txtSubwayEnd").value = params[1];
	}
}

function CallPathInfo(param) {
	if(param.indexOf("undefined") > -1) {
		setSwfParam();
		return;
	}
	
	$("printWrapDiv").innerHTML = getMetroResultHTML(param, true);
	$("printWrapDiv").style.display = "block";
}

function getMetroResultHTML(param, showButton) {
	var mInfo = param.split("#");
	var stations = mInfo[0].split("@");
	var fastTransText = [];
	var metroInfos = mInfo[1].split("@");
	var sName = stations[0];
	var eName = stations[stations.length - 1];
	for(i=0; i<metroInfos.length; i++) {
		var metroInfo = metroInfos[i].split(":");
		if(metroInfo[0]) 
			stations[i] = stations[i].replace( /\)/, " " + metroInfo[3] + "번객차 " + metroInfo[4] + "번문)");
	}
	var etcInfos = mInfo[2].split("@");
	var etcInfo = etcInfos[0].split(":")
	var tCnt = etcInfos.length - 1;
	var sCnt = parseInt(etcInfo[3]);
	for(i=1; i<etcInfos.length; i++) {
		sCnt += parseInt(etcInfos[i]);
	}
	var startIds = mInfo[3].split(",");
	var path = stations[0] + " -> " ;
	for(i=1; i<stations.length-1; i++) {
		path += stations[i];
		path += "<img src=\"../img/traffic/fast/metro_icon_transfer.gif\" width=\"16\" height=\"16\" alt=\"환승\" />  ->";
	}
	path += stations[stations.length - 1];
	
	var cntText = tCnt > 0 ? tCnt + "”회 환승</strong> 하셔야 합니다.</dd>" : "</strong>입니다.</dd>"
	var transText = tCnt > 0 ? "<li><strong>환승회수</strong> : "+ tCnt + "회  </li>" : "";
	var resultText =  "	<div  class=\"metroResult\">";
	resultText += "		<strong>\""+ sName +"\"</strong> 출발, <strong>\"" + eName + "\"</strong> 도착 검색 결과";
	resultText += "	</div>";
	resultText += "	<table class=\"printWrapin\" style=\"width:100%\">";
	resultText += showButton ? "		<tr><td style=\"width:50%\">" : "		<tr><td>";
	resultText += "		<dl>";
	resultText += "			<dd>" + path + "</dd>";
	resultText += "			<dd class=\"none\">";
	resultText += "				<ul>";
	resultText += "					<li><strong>요금</strong> : " + etcInfo[0]+ "원 (카드)</li>";
	resultText += "					<li><strong>시간</strong> : " + etcInfo[1]+ "분</li>";
	resultText += transText;
	resultText += "				</ul>";
	resultText += "			</dd>";
	if (showButton) {
		resultText += "			<dt>";
		resultText += "				<a href=\"javascript:metroprint();\"><img src=\"../img/traffic/fast/btn_metro_print.gif\" width=\"104\" height=\"28\" alt=\"프린트하기\" /></a>";
		resultText += "			</dt>";
	}
	resultText += "		</dl>";
	resultText += showButton ? "		</td><td style=\"width:50%\">": "		</td><td>";
	resultText += "		<dl class=\"fr\">";
	resultText += "			<dd>선택하신 구간은 총 <strong>“" + sCnt + "”개역“"+ cntText;
	resultText += "			<dd>요금은 <strong>“" + etcInfo[0]+ "원”</strong>입니다.</dd>";
	if (showButton) {
		resultText += "			<dt>";
		resultText += "				<a href=\"javascript:metroRouteSearch(0);\" style=\"cursor:pointer;\"><img src=\"../img/traffic/fast/btn_transfer.gif\" width=\"122\" height=\"28\" alt=\"최소환승 보기\" /></a>";
		resultText += "				<a href=\"javascript:setSwfParam('')\"><img src=\"../img/traffic/fast/btn_reset.gif\" width=\"142\" height=\"28\" alt=\"출발/도착 재설정\" /></a>";
		resultText += "			</dt>";
	}
	resultText += "		</dl>";
	resultText += "		</td></tr>";
	resultText += "	</table>";
	
	return showButton ? "<div id=\"printWrap\">" + resultText + "</div>" : resultText;
}

function CallAllLane(argSID) {
//	alert(SID);
}
function CallStnInfo(SID) {
	metroDetail('', SID);
}

function swfMetro(nm, id) {
	var strSWF = "";
	strSWF += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0" id="swlsa" name="swlsa" width="922px" height="602px" align="top" style="vertical-align:top;">';
	strSWF += '	<param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="../img/traffic/swf/swlsa.swf" />';
	strSWF += '	<param name="quality" value="high" /><param name="wmode" value="transparent" /><param name="flashvars" value="wSSN=&wESN=&wSSID=&wSOpt=1"/>';
	strSWF += '<embed id="swlsa" name="swlsa" src="../img/traffic/swf/swlsa.swf" flashvars="wSSN=&wESN=&wSSID=&wSOpt=1" quality="high" bgcolor="#ffffff" ';
	strSWF += '	width="922px" height="602px" wmode="transparent" swLiveConnect=true id="swlsa" name="swlsa" align="top" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="vertical-align:top;" />';
	strSWF += '</object>';
	$(id).innerHTML = "";
	$(id).innerHTML = strSWF;
}

var swfSNParam = "";
var swfENParam = "";
var swfSIDParam = "";
var swfEIDParam = "";

function setMetroStation(nm, id, flag){
	var s = $("txtSubwayStart").value;
	var e = $("txtSubwayEnd").value;
	if(s != "" && e != ""){
		var k = metroRouteSearch(1);
		return;
	}
	
	if(flag == "S"){
		swfSNParam = "&wSSN="+nm ;
		swfSIDParam = "&wSSID=" + id ;
	}
	else if(flag == "E"){
		swfENParam = "&wESN="+nm ;
		swfEIDParam = "&wESID=" + id ;
	}
	
	var resultParam = "";
	if(s != "" ) resultParam = swfSNParam + swfSIDParam;
	if(e != "" ) resultParam = swfENParam + swfEIDParam;

	resultParam += "&temp="+ Math.random();

	setSwfParam(resultParam);
}

var mOpt = 1;
function metroRouteSearch(opt){

	var s = trim($("txtSubwayStart").value);
	if(s == "") {
		alert("출발지를 선택하세요.");
		$("txtSubwayStart").focus();
		return;
	}
	var e = trim($("txtSubwayEnd").value);
	if(e == "") {
		alert("도착지를 선택하세요.");
		$("txtSubwayEnd").focus();
		return;
	}	
	
	if(s != "" && e != "" ){
		$("sSearchResultLayer").style.display = "none";
		$("eSearchResultLayer").style.display = "none";
	}
	var pars = "wSSN="+s+"&wESN="+e+"&wSOpt="+opt + "&temp="+ Math.random();
	mOpt = opt;
	setSwfParam(pars);

}
function metroRouteSetStart(s, ssid){
    $("sSearchResultLayer").style.display = "none";
    
    var pars = "wSSN="+s+"&wSSID="+ssid+"&temp="+ Math.random();
    setSwfParam(pars);

}
function metroRouteSetEnd(e, esid){
    $("eSearchResultLayer").style.display = "none";

    var pars = "wESN="+e+"&wESID="+esid+"&temp="+ Math.random();
    setSwfParam(pars);
}

function setSwfParam(sparam) {
	//flash 파일 세팅
	if (bIE) {
		$("swlsa").movie = "../img/traffic/swf/swl"+swfname+".swf";
		var swfparam = "../img/traffic/swf/swl"+swfname+".swf?" + sparam + "&temp=" + Math.random();
		$('swlsa').LoadMovie(5, swfparam);
		$('swlsa').GotoFrame(5);
	} else {
		var embedTag = $("swlsa").getElementsByTagName("embed")[0];
		if(embedTag) {
			embedTag.setAttribute("flashvars", sparam);
		}
		$("show_metro").innerHTML = $("show_metro").innerHTML;
	}
		
	if(sparam == "")
	{
		$("printWrapDiv").innerHTML = "";
		$("printWrapDiv").style.display = "none";
	}
}

function metroprint() {
    var url = "/traffic/search.map?cmd=metroPrint&printable=true";
	var s = $("txtSubwayStart").value;
	var e = $("txtSubwayEnd").value;
	 
    var swfParam = "&wSSN="+s+"&wESN="+e+"&wSOpt="+mOpt;
	 
	url +=  "&swfParam=" + encodeURIComponent(swfParam);
	url +=  "&swfName=" + swfname;

	var wHeight = window.screen.availHeight;
    var prop = 'resizable=no, scrollbars=';
    prop += wHeight > 770 ? "no" : "yes";

    openWindow(url,"m_print", 922, wHeight > 770 ? 770: wHeight, prop);
}

var isRefresh = true;
var refreshTime = 0;

function disabledRefresh () {
	refreshTime = 500;
	isRefresh = false;
}

function enabledRefresh () {
	isRefresh = true;
	
	window.setTimeout(function () {
		if (isRefresh) {
			refreshMove();
		}		
	}, refreshTime);
}

function directConnect(dcObj) {
	var tab = dcObj.tabName;
	if (tab == "") return;
	
	var cid = CONV_AREA[dcObj.areaCode];
    if (dcObj.cid != "-1") {
        cid = dcObj.cid;
        dcObj.areaCode = CONV_TAREA[cid];
    }        
        
	setAreaNavi(dcObj.areaCode, CONV_NAME[cid], false);
	
	if (tab == "route") {
		oldCid = {sCid:"", eCid:""};
		setSearchFlag(dcObj.searchFlag);
		
		isSendable= true;
		layerName = "S"	;
		if (dcObj.sx == "" || dcObj.sy == "" || dcObj.sName == "") return;
		goPoi(dcObj.sx, dcObj.sy, dcObj.sName, true, true);
		if(isSendable) {
			if (dcObj.ex == "" || dcObj.ey == "" || dcObj.eName == "") return;
			layerName = "E";
			goPoi(dcObj.ex, dcObj.ey, dcObj.eName, true, true);
			var maxX = Math.max(dcObj.sx, dcObj.ex);
			var maxY = Math.max(dcObj.sy, dcObj.ey);
			var minX = Math.min(dcObj.sx, dcObj.ex);
			var minY = Math.min(dcObj.sy, dcObj.ey);
			fullLane(minX, minY, maxX, maxY);
			//경로 검색 수행
			routeSearch();
		}
	} else if (tab == "bus") {
		goTab("bus");
		if(dcObj.busNo !="" && dcObj.bid != "") {
			$("txtBusNumber").value = dcObj.busNo;
			doSearch($("txtBusNumber"), 'N');
			busDetail(dcObj.bid, false);
			showBusLane(dcObj.bid, false);
		} else if(dcObj.sid != "" & dcObj.sx != "" & dcObj.sy != "" & dcObj.sName != "") {
			$("txtBusStation").value = dcObj.sName;
			doSearch($("txtBusStation"), 'B');
			goStation(dcObj.sid, dcObj.sx, dcObj.sy, dcObj.sName, '');
		}
	} else {
		goTab("metro");
		if (dcObj.sName != "" ) {
			$("txtSubwayStart").value = dcObj.sName;
		}
        if (dcObj.eName != "") {
            $("txtSubwayEnd").value = dcObj.eName;
        }
        if (dcObj.metroNameExistFlag){
	        if (dcObj.metroNameExistFlag == METRO_NAME_EXIST["BOTH"]) {
	            metroRouteSearch(dcObj.opt);
	        }
            else {
	            if (dcObj.sName != ""){
	                if (dcObj.metroNameExistFlag == METRO_NAME_EXIST["START"]){
	                    metroRouteSetStart(dcObj.sName, dcObj.ssid); // ssid가 없는 상태인 경우는  flash에서 표시해주지 않음
	                }
                    else{
                        doSearch($("txtSubwayStart"), 'MS');
                    }
	            }
	            if (dcObj.eName != ""){
	                if (dcObj.metroNameExistFlag == METRO_NAME_EXIST["END"]){
	                    metroRouteSetEnd(dcObj.eName, dcObj.esid);  // esid가 없는 상태인 경우는  flash에서 표시해주지 않음
	                }
                    else if (dcObj.metroNameExistFlag == METRO_NAME_EXIST["START"]){
                        doSearch($("txtSubwayEnd"), 'ME');
                    }
	            }
            }
        }
        else{
	        if (dcObj.sName != "" && dcObj.eName != "") {
	            metroRouteSearch(dcObj.opt);
	        }
	        else if (dcObj.sName != "" && dcObj.ssid != "-1"){
	            metroRouteSetStart(dcObj.sName, dcObj.ssid);
	        }
	        else if (dcObj.eName != "" && dcObj.esid != "-1" ){
	            metroRouteSetEnd(dcObj.eName, dcObj.esid);
	        }
        }
	}
}
