﻿var map='',mapip,crtCat,crtSeq,mkr,mkrLoading,iMkr,iMkrO,iTmpO,iLoading,iPath,iPathE,preLV,preLatLng,tmpMkr,moving=0,crtCB,crtRQ,crtPG,ms=0,isQueried=0,dragged=0,drawing=0,mref=1,mrefo=1,prt=0;
var ps_opip='開啟子母視窗',ps_cpip='關閉子母視窗';
var NF1="可見範圍無相關店家~";
var NF3="所有搜尋皆已移除!";
var NF4="click地圖任一點開始測距!";
var NF5="地圖已寄出囉~";
var NF6="店家暫無地圖資訊~";
var NF7="目前沒有任何搜尋結果，<br>請進行搜尋動作~~";
var AL1="查詢進行中....";
var AL6="尚未進行任何查詢~";
var AL8="沒點準喔~";
var zmLmt=7;
var minH=650;
var lv=8,lvd=4,pip=1;
var perPage=10,perNPage=10;
var mkrAy=new Object(),mkrSR=new Object(),mkrMS=new Object();
var currPoints=[];
var currPoly;
var mkrPath=[];
var currPath;
function loadMap(){
	setLMDiv();
	map=new CMap($('#map').get(0));
	map.addControl(CControl.C_SCALE_CTRL);
	map.addControl(new CLargeZoomControl(),new CControlPosition(C_ANCHOR_TOP_LEFT,new CSize(10,10)));
	map.enableContinuousZoom();
	map.enablePipPane();
	map.enableScrollWheelZoom(true);
	CEvent.addListener(window,"resize",setLMDiv);
	CEvent.addListener(map,'moveend',mapMoveEnd);
	CEvent.addListener(map,'movestart',mapMoveStart);
	CEvent.addListener(map,'dragend',mapDragEnd);
	CEvent.addListener(map,'zoomend',mapZoomEnd);
	CEvent.addListener(map,'click',mapClick);
	CEvent.addListener(map,'drag', mapDrag);
	CEvent.bind(map,'contextmenu',map,showCM);
	iconLoading();
	mapip=new CMap($('#mapPip').get(0));
	
	//if(window.location.hash==""||window.location.hash=="#"){
	map.setCenter(new CLatLng(25.0476,121.5170),lv);
	mapip.setCenter(new CLatLng(25.0476,121.5170),lv-lvd);
	map.setPip(mapip,2,'#bf8515','#795000',0.35);
	//}
	//CEvent.addListener(mapip,'moveend',mapDragEnd);
	rsMkr();
	crtCB=map.getBounds();
}
function iconLoading(){
	iMkr=new CIcon(null,'/images/yp_data_icon_2.png');
	iMkr.iconSize=new CSize(34,32);
	iMkr.iconAnchor=new CPoint(22,32);
	iMkr.infoWindowAnchor=new CPoint(17,0);
	iMkrO=new CIcon(iMkr,'/images/yp_data_icon_1.png');
	iLoading=new CIcon(null,'/images/loading_map.gif');
	iLoading.iconSize=new CSize(132,136);
	iLoading.iconAnchor=new CPoint(66,68);
	iLoading.infoWindowAnchor=new CPoint(66,0);
	iPath=new CIcon(null,'/images/icon_map_here2.gif');
	iPath.iconSize=new CSize(20,41);
	iPath.iconAnchor=new CPoint(10,41);
	iPath.infoWindowAnchor=new CPoint(10,0);
	iPathE=new CIcon(iPath,'/images/icon_map_here.gif');
}
function setLMDiv(){
	var doch=document.documentElement.clientHeight;
	var mh=$('#topLoc').position().top;
	var mg=new Array(20,52,89,75,87);
 	hh=(doch<minH)?minH-mh:doch-mh;
	$('#map_block').css('height',(hh-mg[0])+'px');
	$('#map_block_left,#map_block_right,.tabs-mapl').css('height',(hh-mg[1])+'px');
	$('.tabs-maplc').css('height',(hh-mg[2])+'px');
	$('#map').css('height',(hh-mg[3])+'px');
	$('#izmh').css('width','18px');
	$('#shPip').css('top',(hh-mg[4])+'px');
	if($('#map_block_left').css('display')!='none')
		$('#secondary').css('left','475px')
	$('#secondary').css('top',(hh-mg[3])-130+'px');
	$('#mapLoading').hide();
	$('#map_block').css('height',(hh-mg[0])+'px').show();
	if(map){
		map.checkResize();
		crtCB=map.getBounds();
	}
}
function mapZoomEnd(o,n){
	if(n>=lvd-1)mapip.setZoom(n-lvd);
	else mapip.setZoom(0);
	if(n<lvd-1){
		pip=1;
		shPip();
	}
	else{
		pip=0;
		shPip();
	}
}
function shPip(){
	var img=$('#pipImg');
	if(pip){
		$('#secondary').hide();
		pip=0;
		img.attr('src','/images/spip.gif');
		$('#shPip').attr('title',ps_opip);
	}
	else{
		$('#secondary').show();
		pip=1;
		img.attr('src','/images/hpip.gif');
		$('#shPip').attr('title',ps_cpip);
	}
}
function showCM(m,p){
	var obj=$('#contextMenu');
	map.closeInfoWindow();
	var CMLatLng=map.fromDivPixelToLatLng(new CPoint(p.x,p.y));
	mkr.setPoint(CMLatLng);
	var CP=map.fromLatLngToDocPixel(CMLatLng);
	obj.css('top',CP.y+document.documentElement.scrollTop+'px');
	obj.css('left',CP.x+'px');
	obj.css('display','inline');
	obj=null;
}
function zmv(){
	if($('#yp_map_search_bar').css('display')=='none'){
		$('#yp_search_bar').hide();
		$('#yp_map_search_bar').show();
		$('#izmv').attr('src','/images/yp_map_down_1.gif');
		$('#izmv').attr('title','向下縮小');
		copyParaMap(1);
	}
	else{
		$('#yp_map_search_bar').hide();
		$('#yp_search_bar').show(); 
		$('#izmv').attr('src','/images/yp_map_top_1.gif');
		$('#izmv').attr('title','向上擴展');
		copyParaMap(0);
	}
	setLMDiv();
	map.checkResize();
}
function zmh(){
	if($('#map_block_left').css('display')!='none'){
		$('#map_block_left').hide();
		$('#map_block_right').css('width','963px');
		$('#map').css('width','98%');
		$('#secondary').css('left','760px');
		$('#izmh').attr('src','/images/yp_map_right_1.gif');
		$('#izmh').attr('title','向右縮小');
	}
	else{ 
		$('#map_block_right').css('width','678px');
		$('#map_block_left').show();
		$('#map').css('width','97%'); 
		$('#secondary').css('left','475px');
		$('#izmh').attr('src','/images/yp_map_left_1.gif');
		$('#izmh').attr('title','向左擴展');
	};
	map.checkResize();
}
function rsMkr(){
	mkrLoading = newAddMkr(iLoading,'',true,false,999);
	mkr=newAddMkr(iMkrO,'',true,false,500);
	mkr.setText('<p class="black01">*</p>');
}
function newAddMkr(ic,tle,ca,da,zi){
	var tMkr=new CMarker(new CLatLng(0, 0),{icon:ic,title:tle,clickable:ca,draggable:da});
	map.addOverlay(tMkr);
	if(typeof(zi)=='number')tMkr.setZIndex(zi);
	return tMkr;
}
function hideCM(){
	$('#contextMenu').hide();
	mkr.setPoint(new CLatLng(0,0));
	cgMapMenu(99,'menuFnc');
	$('#mapCpy').hide();
}
function cgMapMenu(s,n){
  $("td[name='"+n+"']").each(function(i){
		if(i==s){
			$(this).css('backgroundColor','#ffae06');
			$(this).css('cursor','pointer');
		}
		else
			$(this).css('backgroundColor','#FEE79F');
  });
}
function mapMoveStart(){
	map.closeInfoWindow();
	$('#map').css('cursor','Move');
	hideCM();
	$('#mapSr').hide();
	$('#mapEmail').hide();
}
function mapDragEnd(){
	//setTimeout('latlngz()', 0) ;
}
function mapMoveEnd(){
	$('#map').css('cursor','Default');
	if(ms){
		if(map.getZoom()<zmLmt)map.setZoom(zmLmt);
		rsMkr();
		hideCM();
		$('#msg1').hide();
		var obj=$('#mapSr');
		var objP=map.fromLatLngToDocPixel(map.getCenter());
		obj.css('left',objP.x-150+"px").css('top',objP.y-20+document.documentElement.scrollTop+"px").show();
		$('#key').get(0).focus();
		ms=0;
	}
	crtCB=map.getBounds();
}
function latlngz(){
	var loc;
	moving=1;
	loc='@lat='+map.getCenter().lat().toFixed(6).toString()+'&lng='+map.getCenter().lng().toFixed(6).toString()+'&z='+map.getZoom().toString();
	if(!isQueried)
		$.historyLoad(base64Encode('0'+loc));
}
function mapCpy(){
	var obj=$('#mapCpy');
	if(obj.css('display')=='block')obj.hide();
	else{
		hideCM();
		var mc=map.getCenter();
		var objP=map.fromLatLngToDocPixel(mc);
		obj.css('left',objP.x-200+"px").css('top',objP.y-20+document.documentElement.scrollTop+"px").show();
		latlngz();
		$('#cpy').val(window.location.href);
		$('#cpy').get(0).select();
	}
}
function kHandle(e){
	var code=0;
	if(!e)e=window.event;
	if (e.keyCode)code=e.keyCode;
  else if(e.which)code=e.which;
  if(code==13)kwSearch(1);
}
function kbHandle(e){
	var code=0;
	if(!e)e=window.event;
	if (e.keyCode)code=e.keyCode;
  else if(e.which)code=e.which;
  if(code==13)locLocating('map_Address',qa);
}
function kbzHandle(e){
	var code=0;
	if(!e)e=window.event;
	if (e.keyCode)code=e.keyCode;
  else if(e.which)code=e.which;
  if(code==13)locLocating('map_Address_zoom',qa);
}
function locLocating(id){
	if($.trim($('#'+id).val())!=''&&qa)
		get_longt_lat(id,'posSearch',escape($('#'+id).val()));
	else 
		alert('至少輸入地點');
}
function POSOver(){
	this.openInfoWindow('<span><b>'+unescape(this.desc)+'</b></span>');
}
function MMMOver(){
	if(!checkRangeSin(this,crtCB.getSouthWest(),crtCB.getNorthEast()))map.setCenter(new CLatLng(this.getPoint().lat(),this.getPoint().lng()));
	if(tmpMkr){
		tmpMkr.setZIndex(tmpMkr.intZIndex);
		tmpMkr.setIcon(iMkr);
	}
	this.intZIndex=this.getZIndex();
	this.setZIndex(1);
	this.setIcon(iMkrO);
	this.openInfoWindow('<div class=maplist>'+this.desc1+'</div>');
	if(mkrAy.c){
		this.openInfoWindow('<div class=maplist>'+this.desc1+'<p>距離中心點約 <b>'+parseInt(this.getPoint().distanceFrom(mkrAy.c))+'</b> 公尺</div></div>');
	}
	else
		this.openInfoWindow('<div class=maplist>'+this.desc1+'</div></div>');
	tmpMkr=this;
	if(mref){
		$('div[name=map_rs]:eq('+this.num+')').toggleClass('yp_map_category_list_hov').toggleClass('yp_map_category_list_out');
		$('#tabs-mapl-2').get(0).scrollTop=this.num*55;
	}
}
function MMMOut(){
	if(mrefo)$('div[name=map_rs]:eq('+this.num+')').toggleClass('yp_map_category_list_hov').toggleClass('yp_map_category_list_out');
}
function mpItf(p){
	if($('#mapSr').css('display')=='block')
		$('#mapSr').hide();
	else{
		map.removeOverlay(mkr);
		ms=1;
		map.panTo(p);
	}
}
function pageController(p,c){
	crtPG='@'+p;
	$.historyLoad(base64Encode(crtRQ+crtPG));
}
function paging(tor,curp,c){
	var html='<div class="yp_map_search_p">';
	var rtop=Math.ceil(tor/perPage),top;
	var down=Math.ceil(curp/perNPage)-1;
	down=down*perNPage+1;
	if(rtop>(down+perNPage-1))
		top=down+perNPage-1;
	else
		top=rtop;
	if(down>1)
		html+='<a href="javascript:void(0)" onclick="pageController('+(down-1)+','+c+')"> < </a>';		
	for(var i=down;i<=top;i++){
		if(curp==i)
			html+=i;
		else
			html+='<a href="javascript:void(0)" onclick="pageController('+i+','+c+')"> '+i+' </a>';
	}
	if(rtop>top)
		html+='<a href="javascript:void(0)" onclick="pageController('+(top+1)+','+c+')"> > </a>';
	html+='</div></div>'
	return html;
}
function showMarkers(jsonObj){
	GAKeyword('search_by_map');
	var LB,TR,mkr,ccl,bt,display='';
	mkrLoading.setPoint(new CLatLng(0, 0));
	var l=jsonObj.ResultSet.totalResultsReturned;
	var tor=jsonObj.ResultSet.totalResultsAvailable;
	var curp=jsonObj.ResultSet.page;
	if(l!=0){
		if(map.getZoom()<zmLmt)map.setZoom(zmLmt);
		if(!prt)selectTabs('tabs-mapl-li2', 'tabs-mapl-board', 'tabs-mapl-2', 'yp_map_tab_selected');
		var tmp=jsonObj.ResultSet.Result;
		var html='';
		if(!prt){
			html+='<div class="yp_map_search_result"><div class="yp_map_search_result_c1">共找到 <b>'+tor+'</b> 筆店家資料。</div>';
			html+=paging(tor,curp,3);
		}
		preLatLng = new CLatLng(parseFloat(jsonObj.ResultSet.SysY),parseFloat(jsonObj.ResultSet.SysX));
		preLV = map.getZoom();
		map.setCenter(preLatLng);
		for(var i=0;i<tmp.length;i++){
			if(tmp[i].alias=='')
				display=tmp[i].user1;
			else
				display=tmp[i].alias;
			bt="";
			mkr=new CMarker(new CLatLng(parseFloat(tmp[i].lat),parseFloat(tmp[i].longt)),{icon:iMkr,clickable:true,draggable:false});
			if(!prt){
				if(tmp[i]._url)
				  bt+="<span class='yp_content_small_button'><A href='http://" + tmp[i]._url + "' TARGET='_blank'>網站</A></span> ";
				if(tmp[i].webpage_url)
				  bt+="<span class='yp_content_small_button'><A href='http://hipage.hinet.net/" + tmp[i].webpage_url + "' TARGET='_new'>網頁</A></span> ";
				if(tmp[i].email)
				  bt+="<span class='yp_content_small_button'><A href='mailto:" + tmp[i].email  + "'>E-mail</A></span> ";
			}
			mkr.desc1='<div style="text-align:left;font-size:12px"><b><a href='+tmp[i].op+' target=_new>'+unescape(display)+'</a></b><br><img border=0 src=http://'+ImgServer+'/iat/'+tmp[i].origarea+'/'+tmp[i].seq+'_3.gif'+'><br>'+unescape(tmp[i].address);			
			mkr.num=i;
			html+='<div name="map_rs" class="yp_map_category_list" onmouseover="this.className=\'yp_map_category_list_hov\';focusMkr('+i+')" onmouseout="this.className=\'yp_map_category_list_out\';unfocusMkr('+i+')" onMouseOver="this.className=\'yp_map_category_list_hov\'" onMouseOut="this.className=\'yp_map_category_list_out\'">';
			html+='<div class="yp_map_search_result_t1">'+(i+1+((curp-1)*perPage))+'. <a href='+tmp[i].op+' target="_new">'+unescape(display)+'</a></div>';
			html+='<div><img border=0 src=http://'+ImgServer+'/iat/'+tmp[i].origarea+'/'+tmp[i].seq+'_3.gif'+'></div>';
			html+='<div>'+unescape(tmp[i].address)+'</div>'+bt;
			html+='</div>';
			map.addOverlay(mkr);
			mkr.setText('<p class="black01">'+(i+1+((curp-1)*perPage))+'</p>');

			CEvent.addListener(mkr,"mouseover",MMMOver);
			CEvent.addListener(mkr,"mouseout",MMMOut);
			mkrAy[i]=mkr;
		}
		mkrAy.c=preLatLng;
		$('#tabs-mapl-2').html(html);
		//ccl=drawCircle(map.getBounds().getSouthWest(),map.getCenter(),map.getZoom());

		mkr=new CMarker(preLatLng,{icon:iMkrO,clickable:true,draggable:false});
		mkr.desc='我是中心點';
		ccl=drawCircle(map.getBounds().getSouthWest(),map.getCenter(),map.getZoom());
		mkr.desc+='，同心圓半徑每圈間隔為 '+ccl+' 公尺~';
		CEvent.addListener(mkr,"mouseover",POSOver);
		map.addOverlay(mkr);
		mkr.setText('<p class="black01">*</p>');
		CEvent.fire(mkr,'mouseover');
	}
	else{
		map.openInfoWindow(map.getCenter(),NF1,new CSize(150,30));
		$('#tabs-mapl-2').html(NF7);
	}
}
function showSR(jsonObj,pairs){
	GAKeyword('search_by_map');
	var LB,TR,mkr,ccl,bt,rqString,request,display='';
	var l=jsonObj.ResultSet.totalResultsReturned;
	var tor=jsonObj.ResultSet.totalResultsAvailable;
	var curp=jsonObj.ResultSet.page;
	if(l!=0){
		mkrLoading.setPoint(new CLatLng(0, 0));
		if(pairs&&unescape(mkTle).indexOf('座標中心點')==-1){
			$('#map_Address').val(unescape(mkTle));
			$('#map_Address_zoom').val(unescape(mkTle));
		}
		if(!prt)selectTabs('tabs-mapl-li2', 'tabs-mapl-board', 'tabs-mapl-2', 'yp_map_tab_selected');
		var tmp=jsonObj.ResultSet.Result;
		var html='';
		if(!prt){
			html+='<div class="yp_map_search_result"><div class="yp_map_search_result_c1">共找到 <b>'+tor+'</b> 筆店家資料。</div>';
			html+=paging(tor,curp,3);
		}
		var sw,ne,cb
		sw=new CLatLng(parseFloat(jsonObj.ResultSet.MinY),parseFloat(jsonObj.ResultSet.MinX));
		ne=new CLatLng(parseFloat(jsonObj.ResultSet.MaxY),parseFloat(jsonObj.ResultSet.MaxX));
		cb=new CLatLngBounds(sw,ne);
		preLatLng = new CLatLng(parseFloat(jsonObj.ResultSet.SysY),parseFloat(jsonObj.ResultSet.SysX));
		preLV = map.getBoundsZoomLevel(cb);
		map.setCenter(preLatLng,preLV);
		for(var i=0;i<tmp.length;i++){
			if(tmp[i].alias=='')
				display=tmp[i].user1;
			else
				display=tmp[i].alias;
			bt="";
			if(parseFloat(tmp[i].longt)<=0)
				continue;
			mkr=new CMarker(new CLatLng(parseFloat(tmp[i].lat),parseFloat(tmp[i].longt)),{icon:iMkr,clickable:true,draggable:false});
			if(!prt){
				if(tmp[i]._url)
				  bt+="<span class='yp_content_small_button'><A href='http://" + tmp[i]._url + "' TARGET='_new'>網站</A></span> ";
				if(tmp[i].webpage_url)
				  bt+="<span class='yp_content_small_button'><A href='http://hipage.hinet.net/" + tmp[i].webpage_url + "' TARGET='_new'>網頁</A></span> ";
				if(tmp[i].email)
				  bt+="<span class='yp_content_small_button'><A href='mailto:" + tmp[i].email  + "'>E-mail</A></span> ";
			}
			mkr.desc1='<div style="text-align:left;font-size:12px"><b><a href='+tmp[i].op+' target=_new>'+unescape(display)+'</a></b><br><img border=0 src=http://'+ImgServer+'/iat/'+tmp[i].origarea+'/'+tmp[i].seq+'_3.gif'+'><br>'+unescape(tmp[i].address);
			html+='<div name="map_rs" class="yp_map_category_list" onmouseover="this.className=\'yp_map_category_list_hov\';focusMkr('+i+')" onmouseout="this.className=\'yp_map_category_list_out\';unfocusMkr('+i+')" onMouseOver="this.className=\'yp_map_category_list_hov\'" onMouseOut="this.className=\'yp_map_category_list_out\'">';
			html+='<div class="yp_map_search_result_t1">'+(i+1+((curp-1)*perPage))+'. <a href='+tmp[i].op+' target="_new">'+unescape(display)+'</a></div>';
			html+='<div><img border=0 src=http://'+ImgServer+'/iat/'+tmp[i].origarea+'/'+tmp[i].seq+'_3.gif'+'></div>';
			html+='<div>'+unescape(tmp[i].address)+'</div>'+bt;
			html+='</div>';
			mkr.num=i;
			map.addOverlay(mkr);
			mkr.setText('<p class="black01">'+(i+1+((curp-1)*perPage))+'</p>');
			CEvent.addListener(mkr,"mouseover",MMMOver);
			CEvent.addListener(mkr,"mouseout",MMMOut);
			mkrAy[i]=mkr;
		}
		if(pairs)mkrAy.c=preLatLng;
		$('#tabs-mapl-2').html(html);
	}
	else{
			rqString="qrytype=keyword&keyword="+escape(jsonObj.ResultSet.keyword)+"&address="+escape(jsonObj.ResultSet.address)+"&matchfield=l&count=10&maptype=list&sid="+Math.round(Math.random()*10000)+"&page=";
			crtRQ='1@'+rqString;
			crtPG='@1';
			request='http://'+hiPageSearch_IP+'/OES/clsOesQueryByMap.asp?'+rqString+'&key='+$.cookie('key');
			$.getJSON(request, function(data){
				showSRR(data,pairs);
			});
		//map.openInfoWindow(map.getCenter(),NF1,new CSize(150,30));
	}
	
	if(pairs && l!=0){
		var qrAy=new Array(),bf;
		$.each(pairs, function(){
			bf=this.split('=');
			qrAy.push(bf[0]);
			qrAy.push(bf[1]);
		});
		mkrAy.c=new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1]));
		map.setCenter(new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1])));
		var mkr=new CMarker(new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1])),{icon:iMkrO,clickable:true,draggable:false});
		mkr.desc=qrAy[$.inArray('tle', qrAy)+1];
		if(l){
			ccl=drawCircle(map.getBounds().getSouthWest(),map.getCenter(),map.getZoom());
			mkr.desc+='，同心圓半徑每圈間隔為 '+ccl+' 公尺~';
		}
		CEvent.addListener(mkr,"mouseover",POSOver);
		map.addOverlay(mkr);
		mkr.setText('<p class="black01">*</p>');
		CEvent.fire(mkr,'mouseover');
		if(l==0){
			map.openInfoWindow(map.getCenter(),NF1,new CSize(150,30));
			$('#tabs-mapl-2').html(NF7);
		}
		saveMyLocations(qrAy[$.inArray('tle', qrAy)+1]);
	}
}

function showSRR(jsonObj,pairs){
	var LB,TR,mkr,ccl,bt,rqString,request,display='';
	mkrLoading.setPoint(new CLatLng(0, 0));
	var l=jsonObj.ResultSet.totalResultsReturned;
	var tor=jsonObj.ResultSet.totalResultsAvailable;
	var curp=jsonObj.ResultSet.page;
	if(l!=0){
		if(!prt)selectTabs('tabs-mapl-li2', 'tabs-mapl-board', 'tabs-mapl-2', 'yp_map_tab_selected');
		var tmp=jsonObj.ResultSet.Result;
		var html='';
		if(!prt){
			html+='<div class="yp_map_search_result"><div class="yp_map_search_result_c1">共找到 <b>'+tor+'</b> 筆店家資料。</div>';
			html+=paging(tor,curp,3);
		}
		var sw,ne,cb
		sw=new CLatLng(parseFloat(jsonObj.ResultSet.MinY),parseFloat(jsonObj.ResultSet.MinX));
		ne=new CLatLng(parseFloat(jsonObj.ResultSet.MaxY),parseFloat(jsonObj.ResultSet.MaxX));
		cb=new CLatLngBounds(sw,ne);
		preLatLng = new CLatLng(parseFloat(jsonObj.ResultSet.SysY),parseFloat(jsonObj.ResultSet.SysX));
		preLV = map.getBoundsZoomLevel(cb);
		map.setCenter(preLatLng,preLV);
		for(var i=0;i<tmp.length;i++){
			if(tmp[i].alias=='')
				display=tmp[i].user1;
			else
				display=tmp[i].alias;
			bt="";
			if(parseFloat(tmp[i].longt)<=0)
				continue;
			mkr=new CMarker(new CLatLng(parseFloat(tmp[i].lat),parseFloat(tmp[i].longt)),{icon:iMkr,clickable:true,draggable:false});
			if(!prt){
				if(tmp[i]._url)
				  bt+="<span class='yp_content_small_button'><A href='http://" + tmp[i]._url + "' TARGET='_new'>網站</A></span> ";
				if(tmp[i].webpage_url)
				  bt+="<span class='yp_content_small_button'><A href='http://hipage.hinet.net/" + tmp[i].webpage_url + "' TARGET='_new'>網頁</A></span> ";
				if(tmp[i].email)
				  bt+="<span class='yp_content_small_button'><A href='mailto:" + tmp[i].email  + "'>E-mail</A></span> ";
			}
			mkr.desc1='<div style="text-align:left;font-size:12px"><b><a href='+tmp[i].op+' target=_new>'+unescape(display)+'</a></b><br><img border=0 src=http://'+ImgServer+'/iat/'+tmp[i].origarea+'/'+tmp[i].seq+'_3.gif'+'><br>'+unescape(tmp[i].address);
			html+='<div name="map_rs" class="yp_map_category_list" onmouseover="this.className=\'yp_map_category_list_hov\';focusMkr('+i+')" onmouseout="this.className=\'yp_map_category_list_out\';unfocusMkr('+i+')" onMouseOver="this.className=\'yp_map_category_list_hov\'" onMouseOut="this.className=\'yp_map_category_list_out\'">';
			html+='<div class="yp_map_search_result_t1">'+(i+1+((curp-1)*perPage))+'. <a href='+tmp[i].op+' target="_new">'+unescape(display)+'</a></div>';
			html+='<div><img border=0 src=http://'+ImgServer+'/iat/'+tmp[i].origarea+'/'+tmp[i].seq+'_3.gif'+'></div>';
			html+='<div>'+unescape(tmp[i].address)+'</div>'+bt;
			html+='</div>';
			mkr.num=i;
			map.addOverlay(mkr);
			mkr.setText('<p class="black01">'+(i+1+((curp-1)*perPage))+'</p>');
			CEvent.addListener(mkr,"mouseover",MMMOver);
			CEvent.addListener(mkr,"mouseout",MMMOut);
			mkrAy[i]=mkr;
		}
		//if(pairs)mkrAy.c=preLatLng;
		$('#tabs-mapl-2').html(html);
	}
	else{
	
		if(mkTle){
			$('#map_Address').val(unescape(mkTle));
			$('#map_Address_zoom').val(unescape(mkTle));
		}
		var qrAy=new Array(),bf;
		$.each(pairs, function(){
			bf=this.split('=');
			qrAy.push(bf[0]);
			qrAy.push(bf[1]);
		});
		mkrAy.c=new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1]));
		map.setCenter(new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1])));
		var mkr=new CMarker(new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1])),{icon:iMkrO,clickable:true,draggable:false});
		mkr.desc=qrAy[$.inArray('tle', qrAy)+1];
		if(l){
			ccl=drawCircle(map.getBounds().getSouthWest(),map.getCenter(),map.getZoom());
			mkr.desc+='，同心圓半徑每圈間隔為 '+ccl+' 公尺~';
		}
		CEvent.addListener(mkr,"mouseover",POSOver);
		map.addOverlay(mkr);
		mkr.setText('<p class="black01">*</p>');
		CEvent.fire(mkr,'mouseover');
		if(l==0){
			map.openInfoWindow(map.getCenter(),NF1,new CSize(150,30));
			$('#tabs-mapl-2').html(NF7);
		}
		saveMyLocations(qrAy[$.inArray('tle', qrAy)+1]);
	}
}


var mkTle;
function posSearch(lng,lat,tle){
	mkTle=tle;
	var p=1,map_kw,map_addr;
	if($('#Sel_map_Address'))$('#Sel_map_Address').css('visibility','hidden');
	if($('#Sel_map_Address_zoom'))$('#Sel_map_Address_zoom').css('visibility','hidden');
	map.clearOverlays();
	mkrAy=new Object();
	rsMkr();
	if($('#yp_map_search_bar').css('display')=='none'){
		map_kw=$.trim($('#map_Keyword').val());
		map_addr=$.trim($('#map_Address').val());
	}	
	else{
		map_kw=$.trim($('#map_Keyword_zoom').val());
		map_addr=$.trim($('#map_Address_zoom').val());
	}
	if(qk&&map_kw!=""){
		crtRQ='4@lat='+lat+'&lng='+lng+'&tle='+tle+'@keyword='+escape(map_kw)+'&address='+escape(map_addr)+'&lat='+lat+'&longt='+lng+'&count='+perPage+'&page=';
		crtPG='@'+p;
	}
	else{
		if(!tle.indexOf('座標中心點')==-1)
			$('#map_Address').val(unescape(tle));
		crtRQ='2@lat='+lat+'&lng='+lng+'&tle='+tle+'@';
		crtPG='';
	}
	move_po=1;
	$.historyLoad(base64Encode(crtRQ+crtPG));
	saveMyLocations(tle);
}
function saveMyLocations(tle){
	if(tle!=$.cookie('myloc1')&&tle!=$.cookie('myloc2')&&tle!=$.cookie('myloc3')){
		if($.cookie('myloc2')){
			$.cookie('myloc3', $.cookie('myloc2'), { expires: 7, path:'/' });
		}
		if($.cookie('myloc1')){
			$.cookie('myloc2', $.cookie('myloc1'), { expires: 7, path:'/' });
		}
		$.cookie('myloc1', tle, { expires: 7, path:'/' });
	}
	else{
		if(tle==$.cookie('myloc2')){
			$.cookie('myloc2', $.cookie('myloc1'), { expires: 7, path:'/' });
			$.cookie('myloc1', tle, { expires: 7, path:'/' });
		}
		else if(tle==$.cookie('myloc3')){
			$.cookie('myloc3', $.cookie('myloc2'), { expires: 7, path:'/' });
			$.cookie('myloc2', $.cookie('myloc1'), { expires: 7, path:'/' });
			$.cookie('myloc1', tle, { expires: 7, path:'/' });
		}
	}
}
function catSearch(cate,seq,p,skip){
	var TR,LB,loc;
	if($("input[name='nearby']").get(seq).checked){
		$.each($("input[name='nearby']"),function(i){
			if(i!=seq)$(this).attr('checked','');
		});
		if(map.getZoom()<zmLmt)map.setZoom(zmLmt);
		if(!skip){
			crtCat=cate;
			crtSeq=seq;
			TR=map.getBounds().getNorthEast();
			LB=map.getBounds().getSouthWest();
			crtRQ='3@addclass='+cate+'&minx='+LB.lng().toFixed(6)+'&miny='+LB.lat().toFixed(6)+'&maxx='+TR.lng().toFixed(6)+'&maxy='+TR.lat().toFixed(6)+'&count='+perPage+'&page=';
		}
		crtPG='@'+p;
		$.historyLoad(base64Encode(crtRQ+crtPG));
	}
	else{
		map.clearOverlays();
		mkrAy=new Object();
		rsMkr();
		$.historyLoad('');
	}
}
function kwSearch(p){
	$("input[name='nearby']").attr('checked','');
	if($('#key').val().length<2){
		$('#msg1').show();
		$('#key').get(0).focus();
		return false;
	}
	if(map.getZoom()<zmLmt)map.setZoom(zmLmt);
	$('#mapSr').hide();
	var TR,LB,loc;
	TR=map.getBounds().getNorthEast();
	LB=map.getBounds().getSouthWest();
	crtRQ='3@keyword='+escape($("#key").val())+'&minx='+LB.lng().toFixed(6)+'&miny='+LB.lat().toFixed(6)+'&maxx='+TR.lng().toFixed(6)+'&maxy='+TR.lat().toFixed(6)+'&count='+perPage+'&page=';
	crtPG='@'+p;
	$.historyLoad(base64Encode(crtRQ+crtPG));
}
function controller(hash){
	if(hash){
		var qrAy=new Array(),poAy=new Array(),did,pairs,bf,request,fixRQ;
		var rqAy2=new Array('lat','lng','tle');
		//CLog.write(base64Decode(hash));
		did=base64Decode(hash).split('@');
		switch(did[0])
		{
			case '0':	//moving
				$('#tabs-mapl-2').html('');
				map.clearOverlays();
				mkrAy=new Object();
				rsMkr();
				$('#tabs-mapl-2').html('');
				isQueried=0;
				$("input[name='nearby']").attr('checked','');
				if(!prt)selectTabs('tabs-mapl-li1', 'tabs-mapl-board', 'tabs-mapl-1', 'yp_map_tab_selected');
				pairs=did[1].split('&');
				$.each(pairs, function(){
					bf=this.split('=');
				  poAy.push(bf[0]);
				  poAy.push(bf[1]);
				});
				if(!moving){
					map.setCenter(new CLatLng(parseFloat(poAy[$.inArray('lat', poAy)+1]),parseFloat(poAy[$.inArray('lng', poAy)+1])),parseInt(poAy[$.inArray('z', poAy)+1]));
				}
				moving=0;
				break;
			case '1': //out map search
				map.clearOverlays();
				mkrAy=new Object();
				rsMkr();
				endPath(0);
				$('#tabs-mapl-2').html('');
				mkrLoading.setPoint(map.getCenter());
				crtRQ='1@'+did[1];
				crtPG='@'+did[2];
				request='http://'+hiPageSearch_IP+'/OES/clsOesQueryByMap.asp?'+did[1]+did[2]+'&key='+$.cookie('key');
				$.getJSON(request, function(data){
					showSR(data);
				}); 
				isQueried=1;
			  break; 
			case '2': //locating
				map.clearOverlays();
				mkrAy=new Object();
				rsMkr();
				endPath(0);
				$('#tabs-mapl-2').html('');
				crtRQ='2@'+did[1]+'@';
				pairs=did[1].split('&');
				$.each(pairs, function(){
					bf=this.split('=');
					qrAy.push(bf[0]);
					qrAy.push(bf[1]);
				});
				preLatLng = new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1]));
				preLV = 9;
				map.setCenter(preLatLng,preLV);
				var mkr=new CMarker(new CLatLng(parseFloat(qrAy[$.inArray('lat', qrAy)+1]),parseFloat(qrAy[$.inArray('lng', qrAy)+1])),{icon:iMkrO,clickable:true,draggable:false});
				mkr.desc=qrAy[$.inArray('tle', qrAy)+1];
				CEvent.addListener(mkr,"mouseover",POSOver);
				map.addOverlay(mkr);
				mkr.setText('<p class="black01">*</p>');
				CEvent.fire(mkr,'mouseover');
				isQueried=1;
			  break;
			case '3': //in map search
				map.clearOverlays();
				mkrAy=new Object();
				rsMkr();
				endPath(0);
				$('#tabs-mapl-2').html('');
				mkrLoading.setPoint(map.getCenter());
				crtRQ='3@'+did[1];
				crtPG='@'+did[2];
				request='http://'+hiPageSearch_IP+'/OES/clsOesQueryByMap.asp?'+did[1]+did[2]+'&key='+$.cookie('key');
				$.getJSON(request, function(data){
					showMarkers(data);
				}); 
				isQueried=1;
			  break;
			case '4': //locating and keyword search
				map.clearOverlays();
				mkrAy=new Object();
				rsMkr();
				endPath(0);
				$('#tabs-mapl-2').html('');
				mkrLoading.setPoint(map.getCenter());
				crtRQ='4@'+did[1]+'@'+did[2];
				crtPG='@'+did[3];
				pairs=did[1].split('&');
				request='http://'+hiPageSearch_IP+'/OES/clsOesQueryByMap.asp?'+did[2]+did[3]+'&key='+$.cookie('key');
				$.getJSON(request, function(data){
					showSR(data,pairs);
				});			
				
				isQueried=1;
			  break;
			default:
		}
	}
}
function unfocusMkr(idx){
	var obj=mkrAy[idx];
	if(obj){
		mrefo=0;
		CEvent.fire(obj,'mouseout');
		mrefo=1;
	}
	else map.closeInfoWindow();
}
function focusMkr(idx){
	var obj=mkrAy[idx];
	if(obj){
		mref=0;
		CEvent.fire(obj,'mouseover');
		mref=1;
	}
	else
		map.openInfoWindow(map.getCenter(),NF6,new CSize(150,30));
}
function clrMark(){
	hideCM();
	map.clearOverlays();
	mkrAy=new Object();
	rsMkr();
	isQueried=0;
	if(!prt)selectTabs('tabs-mapl-li1', 'tabs-mapl-board', 'tabs-mapl-1', 'yp_map_tab_selected');
	endPath(0);
	map.openInfoWindow(map.getCenter(),NF3,new CSize(150,30));
	$("input[name='nearby']").attr('checked','');
	$('#tabs-mapl-2').html(NF7);
	$.historyLoad('');
	preLatLng=null;
	preLV=null;
}
function getLL(obj){
	hideCM();
	map.openInfoWindow(obj,llFormat(obj),new CSize(150,30));
}
function llFormat(ll){
	var lalo=ll.toUrlValue().split(',');
	return lalo[1]+' ,'+lalo[0];
}
function checkRange(mkrAAy,LB,TR){
	for(var i=0;i<mkrAAy.length;i++){
  	if(LB.lat()<mkrAAy[i].getPoint().lat()&& LB.lng()<mkrAAy[i].getPoint().lng()&& TR.lat()>mkrAAy[i].getPoint().lat()&&TR.lng()>mkrAAy[i].getPoint().lng()){	//若在畫面內
  		map.closeInfoWindow();
			return 1;
		}
	}
}
function checkRangeSin(mk,LB,TR){
	if(LB.lat()<mk.getPoint().lat()&& LB.lng()<mk.getPoint().lng()&& TR.lat()>mk.getPoint().lat()&&TR.lng()>mk.getPoint().lng()){	//若在畫面內
		return 1;
	}
	else return 0;
}
function copyParaMap(f){
	var fr1,fr2,tr1,tr2
	if(f){
		fr1='map_Keyword';
		fr2='map_Address';
		tr1='map_Keyword_zoom';
		tr2='map_Address_zoom';
	}
	else{
		tr1='map_Keyword';
		tr2='map_Address';
		fr1='map_Keyword_zoom';
		fr2='map_Address_zoom';	
	}
	if(qk&&$.trim($('#'+fr1).val())!=""){
		$('#'+tr1).attr('value',$('#'+fr1).val());
		$('#'+tr1).css('color','black');
		qk=1;
	}
	else
		qk=0;
	if(qa&&$.trim($('#'+fr2).val())!=""){
		$('#'+tr2).attr('value',$('#'+fr2).val());
		$('#'+tr2).css('color','black');
		qa=1;
	}
	else
		qa=0;
}
function setStartFlag(map,ll){
	var mkrp=new CMarker(ll,{icon:iPathE,title:'起點',clickable:true,draggable:true});
	mkrp.title="起點";
	mkrp.path=true;
	mkrp.count=0;
	map.addOverlay(mkrp);
	return mkrp;
}
function setEndFlag(map,ll){
	var mkrp=new CMarker(ll,{icon:iPathE,title:'終點',clickable:true,draggable:true});
	mkrp.title="終點";
	mkrp.count=mkrPath.length;
	mkrp.path=true;
	map.addOverlay(mkrp);
	return mkrp;
}
function changePassFlag(mkrp){
	mkrp.title="經過點"+mkrp.count;
	mkrp.setIcon(iPath);
	mkrp.setTitle("經過點"+mkrp.count);
}
function PMOver(){
	this.intZIndex=this.getZIndex();
	this.setZIndex(1);
	IntOver(this);
}
function IntOver(mkrp){
	var msg="<br><a href='javascript:void(0);' onclick='endPath(1);'>重新測距</a> / <a href='javascript:void(0);' onclick='endPath(0);'>結束測距</a>";
	var s="<br>click地圖可建立經過點，<br>移動棋子可改變路線~"+msg,d=0,t=0;
	var wh=80;
	if (mkrp.path){
		var i=1;
		while((mkrp.count-i)>=0&&!mkrPath[mkrp.count-i])
			i++;
		if(i<=mkrp.count){
			for(var j=mkrp.count-i;j<mkrp.count;j++) {
				d+=currPoints[j].distanceFrom(currPoints[j+1]);
			}
			t=d;
			for(var j=0;j<mkrp.count-i;j++) {
				t+=currPoints[j].distanceFrom(currPoints[j+1]);
			}
			s='<br>距上一點約: <font color=red>'+Math.round(d*100)/100+'公尺</font>';
			s+='<br>距離起點約: <font color=red>'+Math.round(t*100)/100+'公尺</font>';
			wh=60;
		}
		if(mkrp.count&&mkrp.count==mkrPath.length-1){
			s+=msg;
			wh=80;
		}
	}
	mkrp.openInfoWindow('<span class=black02><b>'+mkrp.title+'</b></span>'+s,new CSize(150,wh));
}
function PMOut(){
	this.setZIndex(this.intZIndex);
}
function startPath(){
	drawing=1;
	hideCM();
	map.openInfoWindow(map.getCenter(),NF4,new CSize(150,30));
}
function endPath(t){
	drawing=t;
	if(currPoints.length){
		if(currPoly)map.removeOverlay(currPoly);
		currPoly=null;
		currPoints.length=0;
		for (var i=0;i<mkrPath.length;i++){
			if (mkrPath[i])map.removeOverlay(mkrPath[i]);
			mkrPath[i]=null;
		}
		mkrPath.length=0;
	}
}
function mkrPathDrag(){
	if (currPoints.length) {
		currPoints[this.count]=this.getPoint();
		if (iwMouseOver&&CBrowser.agentName=='MSIE')setTimeout(drawPath,10);
		else currPoly.redraw();
	}
}
function addArrow(pf,pt,len,angle){
	var dist=Math.sqrt(Math.pow(Math.abs(pt.x-pf.x),2)+Math.pow(Math.abs(pt.y-pf.y),2));
	if(dist<40) return;
	var ctx=map.getCanvasContext();
	var p1=new CPoint();
	var p2=new CPoint();
	var r=(2*Math.PI/360)*angle;
	var p=new CPoint(parseInt((pf.x + pt.x)/2),parseInt((pf.y+pt.y)/2));
	var dx=pt.x-pf.x;
	var dy=pt.y-pf.y;
	var dist1=Math.sqrt(Math.pow(Math.abs(p.x - pf.x),2)+Math.pow(Math.abs(p.y-pf.y),2));
	var rcos=dx/dist;
	var rsin=dy/dist;
	p1.x=dist-dist1-len*Math.cos(r);
	p1.y=len*Math.sin(r);
	p2.x=p1.x;
	p2.y=-p1.y;
	var p1t=new CPoint();
	var p2t=new CPoint();
	p1t.x=pf.x+Math.round(p1.x*rcos-p1.y*rsin);
	p1t.y=pf.y+Math.round(p1.x*rsin+p1.y*rcos);
	p2t.x=pf.x+Math.round(p2.x*rcos-p2.y*rsin);
	p2t.y=pf.y+Math.round(p2.x*rsin+p2.y*rcos);
	ctx.save();
	ctx.beginPath();
	ctx.moveTo(p.x,p.y);
	ctx.lineTo(p1t.x,p1t.y);
	ctx.moveTo(p.x,p.y);
	ctx.lineTo(p2t.x,p2t.y);
	ctx.strokeStyle='red';
	ctx.globalAlpha=0.4;
	ctx.lineWidth=4;
	ctx.stroke();
	ctx.restore();
}
function mapClick(m,ll) {
	map.closeInfoWindow();
	if(m){
	}
	else{
		if(!dragged&&drawing){
			var mkrp;
			if (!currPoints.length){
				currPoly=new CPolyline(currPoints,'red',4,0.6);
				CEvent.addListener(currPoly,"redraw",showArrow);
				this.addOverlay(currPoly);
				mkrp=setStartFlag(this,ll);
			}
			else{
				if(currPoints.length>1)changePassFlag(mkrPath[mkrPath.length-1]);
				mkrp=setEndFlag(this,ll);
			}
			CEvent.addListener(mkrp,"mouseover",PMOver);
			CEvent.addListener(mkrp,"mouseout",PMOut);
			CEvent.addListener(mkrp,"drag",mkrPathDrag);
			CEvent.addListener(mkrp,"dragend",PMOver);
			mkrp.enableDragging();
			mkrPath.push(mkrp);
			currPoints.push(ll);
			IntOver(mkrp);
		}
		else if(drawing)
			map.openInfoWindow(map.getCenter(),AL8,new CSize(100,30));
	}
	dragged=0;
}
function mapDrag(){if(!dragged)dragged=1;}
function showArrow(){
	if (currPoints.length) {
		for (var i=0;i<currPoints.length-1;i++){
			var p1=map.fromLatLngToDivPixel(currPoints[i]);
			var p2=map.fromLatLngToDivPixel(currPoints[i + 1]);
			addArrow(p1,p2,12,45);
		}
	}
}
function bkPreSH(){
	if(preLatLng){
		map.setCenter(preLatLng,preLV);
	}
	else{
		hideCM();
		map.openInfoWindow(map.getCenter(),AL6,new CSize(150,30));
	}
}
function mapEmail(){
	var obj=$('#mapEmail').get(0).style;
	if(obj.display=='inline')$('#mapEmail').hide();
	else{
		$('#emsg1').hide();$('#emsg2').hide();$('#emsg3').hide();$('#emsg4').hide();
		var mc=map.getCenter();
		var objP=map.fromLatLngToDocPixel(mc);
		obj.left=objP.x-250+"px";
		obj.top=objP.y-100+document.documentElement.scrollTop+"px";
		obj.display="inline";
		latlngz();
		$('#map_link').get(0).href=window.location.href;
	}
}
function ckEmail(s){
	var sa=s.split(';');
	for(var i=0;i<sa.length;i++){
		if(!/(\S)+[@]{1}(\S)+[.]{1}(\w)+/.test(sa[i]))return 0;
	}
	return 1;
}
function sendEmail(){
	var f=1;
	if($.trim($('#sender').val())==""){
		$('#emsg1').css('display','inline');f=0;
	}
	else{
		$('#emsg1').hide();
		if(!ckEmail($('#sender').val())){
			$('#emsg2').css('display','inline');f=0;
		}
		else $('#emsg2').hide();
	}
	if($.trim($('#receiver').val())==""){
		$('#emsg3').css('display','inline');f=0;
	}
	else{
		$('#emsg3').hide();
		if(!ckEmail($('#receiver').val())){
			$('#emsg4').css('display','inline');f=0;
		}
		else $('#emsg4').hide();
	}
	if(f){
		$('#sendMsg').show();
		var b=($('#self').get(0).checked)?1:0;
		request='http://'+WebServer+'/email.asp?s='+$('#sender').val()+'&r='+$('#receiver').val()+'&m='+escape('<a href='+$('#map_link').get(0).href+'>地圖連結</a><p>'+$('#mailMsg').val())+'&b='+b;
		$.getJSON(request, function(data){
			$('#sendMsg').hide();
			$('#mapEmail').hide();
			map.openInfoWindow(map.getCenter(),NF5,new CSize(100,30));
		}); 
	}
}
function roundDis(z){
	var dis;
	switch(z){
		case 7:
			dis=500;
			break;
		case 8:
			dis=200;
			break;
		case 9:
			dis=100;
			break;
		case 10:
			dis=70;
			break;
	}
	return dis;
}
function drawCircle(pos,cpos,zzz){
	var cdis=roundDis(zzz),spot;
	var cn=Math.ceil((pos.distanceFrom(cpos)/cdis));
	for(var i=cn;i>0;i--)map.addOverlay(new CCircle(cpos,(i*cdis),'#ffffff',1,0.5,'#000000',0.02));
	//spot=new CCircle(cpos,(cdis/10),'#000000',1,1,'#ff0000',1);
	//map.addOverlay(spot);
	return cdis;
}
function GAKeyword(str){pageTracker._trackPageview(str);}