//global variables
var gl_lang;
var gl_dest_cd;
var gl_dest_path;
var gl_dest_curr;
var gl_type_cd;
var gl_map;
var gl_bounds;
var gl_urlstr;
var gl_pois;
var gl_param = new Array();
var gl_snap_polygon;
var gl_snap_point;
var gl_disp_polygon;
var gl_max_records;
var gl_uagent;
var gl_mode;
var gl_factor_lat = 0.000903851989505;	//100m
var gl_factor_lng = 0.000925031144844705;	//100m

//default coord for poi_type
gl_dest["6601"]["lat"] = 13.74561195783759;
gl_dest["6601"]["lng"] = 100.5342830480153;
gl_dest["6601"]["zoom"] = 13;
gl_dest["6602"]["lat"] = 12.92912602233185;
gl_dest["6602"]["lng"] = 100.8843080777264;
gl_dest["6602"]["zoom"] = 15;
gl_dest["6617"]["lat"] = 9.502322;
gl_dest["6617"]["lng"] = 100.003707;
gl_dest["6617"]["zoom"] = 11;
gl_dest["6618"]["lat"] = 9.7455;
gl_dest["6618"]["lng"] = 100.026975;
gl_dest["6618"]["zoom"] = 11;
gl_dest["6624"]["lat"] = 12.683593;
gl_dest["6624"]["lng"] = 101.271523;
gl_dest["6624"]["zoom"] = 12;
gl_dest["6625"]["lat"] = 12.553756;
gl_dest["6625"]["lng"] = 101.453648;
gl_dest["6625"]["zoom"] = 12;
gl_dest["6628"]["lat"] = 12.053248;
gl_dest["6628"]["lng"] = 102.335556;
gl_dest["6628"]["zoom"] = 11;
gl_dest["8501"]["lat"] = 17.966394;
gl_dest["8501"]["lng"] = 102.607822;
gl_dest["8501"]["zoom"] = 15;
//ctrl
var gl_domain = new Array();
gl_domain["en"] = "http://www.soidb.com";
gl_domain["th"] = "http://th.soidb.com";
gl_domain["jp"] = "http://jp.soidb.com";

var gl_lang_iso = new Array();
gl_lang_iso["en"] = "en";
gl_lang_iso["th"] = "th";
gl_lang_iso["jp"] = "ja";

//labels
var lbl_per_day = new Array();
lbl_per_day["en"] = "Day";
lbl_per_day["th"] = "Day";
lbl_per_day["jp"] = "日";

var lbl_per_mon = new Array();
lbl_per_mon["en"] = "Month";
lbl_per_mon["th"] = "Month";
lbl_per_mon["jp"] = "月";

var lbl_dwm = new Array();
lbl_dwm["0111"] = lbl_per_day;
lbl_dwm["0112"] = lbl_per_day;
lbl_dwm["0121"] = lbl_per_mon;
lbl_dwm["0131"] = lbl_per_mon;

var lbl_check_all = new Array();
lbl_check_all["en"] = "Select All";
lbl_check_all["th"] = "Select All";
lbl_check_all["jp"] = "全選択";

var lbl_highlight = new Array();
lbl_highlight["en"] = "Highlight POIs by Type";
lbl_highlight["th"] = "Highlight POIs by Type";
lbl_highlight["jp"] = "ＰＯＩをタイプ毎にハイライト";

var lbl_clear_all = new Array();
lbl_clear_all["en"] = "Clear All";
lbl_clear_all["th"] = "Clear All";
lbl_clear_all["jp"] = "全解除";

var lbl_refresh = new Array();
lbl_refresh["en"] = "Refresh Highlights for current viewport";
lbl_refresh["th"] = "Refresh Highlights for current viewport";
lbl_refresh["jp"] = "現在の画面範囲内でハイライトを更新";

var lbl_nopoi_all = new Array();
lbl_nopoi_all["en"] = "No POI within</br> current viewport";
lbl_nopoi_all["th"] = "No POI within</br> current viewport";
lbl_nopoi_all["jp"] = "現在の画面範囲内に<br> ＰＯＩはありません。";

var lbl_nopoi_clear = new Array();
lbl_nopoi_clear["en"] = "highlights are cleared";
lbl_nopoi_clear["th"] = "highlights are cleared";
lbl_nopoi_clear["jp"] = "ハイライトは解除されました";

var lbl_nopoi_refresh = new Array();
lbl_nopoi_refresh["en"] = "Please check POI types above";
lbl_nopoi_refresh["th"] = "Please check POI types above";
lbl_nopoi_refresh["jp"] = "ＰＯＩタイプを選択して下さい。";

var lbl_setting = new Array();
lbl_setting["en"] = "Display Settings";
lbl_setting["th"] = "Display Settings";
lbl_setting["jp"] = "表示設定";

var lbl_limit_recs = new Array();
lbl_limit_recs["en"] = "Limit";
lbl_limit_recs["th"] = "Limit";
lbl_limit_recs["jp"] = "表示上限";

var lbl_limit_poly = new Array();
lbl_limit_poly["en"] = "Display Polygon";
lbl_limit_poly["th"] = "Display Polygon";
lbl_limit_poly["jp"] = "ポリゴン表示";

//loading Message
var lbl_status_common = new Array();
lbl_status_common["en"] = "Status: ";
lbl_status_common["th"] = "Status: ";
lbl_status_common["jp"] = "状況: ";

var lbl_status_loading = new Array();
lbl_status_loading["en"] = "Loading Data...";
lbl_status_loading["th"] = "Loading Data...";
lbl_status_loading["jp"] = "データ読込中...";

var lbl_status_complete = new Array();
lbl_status_complete["en"] = "Loading Finished. ";
lbl_status_complete["th"] = "Loading Finished. ";
lbl_status_complete["jp"] = "データ読込完了 ";

var lbl_tips = new Array();
lbl_tips["en"] = '<b>[Operation]</b><br>This page automatically load POIs which reside inside/nearby selected area.  After Loading complete,  You can highlight POIs for current viewport by checking POI types listed above.  Highlighted POIs will be displayed in this box, and will be shown in red color on the map below.<br><br><b>[Display Speed]</b><br>The Speed of Displaying POI varies greatly among browsers and versions.<br>Google Chrome 2.0: The fastest.  This browser can display 1,000 markers and polygons in a few seconds<br><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*We recommend <a href="http://www.google.com/chrome/?hl=en" target="_blank">Google Chrome</a> for smooth browsing of this page.</b><br>Firefox 3.5, Opera 9.6: These browsers are fairly well in speed.  You can navigate this page without setting display limits.<br>Internet Explorer 6&7: The Slowest.  <b>If slow in response, please uncheck "Display Polygon", or set "Display Limit".';

lbl_tips["th"] = '<b>[Operation]</b><br>This page automatically load POIs which reside inside/nearby selected area.  After Loading complete,  You can highlight POIs for current viewport by checking POI types listed above.  Highlighted POIs will be displayed in this box, and will be shown in red color on the map below.<br><br><b>[Display Speed]</b><br>The Speed of Displaying POI varies greatly among browsers and versions.<br>Google Chrome 2.0: The fastest.  This browser can display 1,000 markers and polygons in a few seconds<br><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*We recommend <a href="http://www.google.com/chrome/?hl=en" target="_blank">Google Chrome</a> for smooth browsing of this page.</b><br>Firefox 3.5, Opera 9.6: These browsers are fairly well in speed.  You can navigate this page without setting display limits.<br>Internet Explorer 6&7: The Slowest.  <b>If slow in response, please uncheck "Display Polygon", or set "Display Limit".';

lbl_tips["jp"] = '<b>[操作方法]</b><br>当頁では対象エリア内（青枠）にあるＰＯＩを自動で読込ます。読込完了後、上段のＰＯＩタイプにチェックすることで、その時点の画面範囲内（赤枠）にある該当ＰＯＩをハイライトできます。ハイライトされたＰＯＩは当枠に一覧表示されるとともに下記地図上で赤色表示されます。<br><br><b>[表示速度]</b><br>ご利用ブラウザの種類・バージョンにより（データ読込後の）表示速度は劇的に変ります。<br>Google Chrome 2.0: 一番高速です。当頁上限1,000件のマーカー＆ポリゴンを瞬時に表示可能で、地図のズームや移動もスムーズです。<br><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*当頁の快適なご利用には<a href="http://www.google.com/chrome/intl/ja/landing.html?hl=ja&hl=ja" target="_blank">Google Chrome</a>をお勧めします。</b>驚くほど高速です。<br>Firefox 3.5, Opera 9.6: まずまずのパフォーマンスです。特に表示制限を設定することなく当頁をご利用いただけます。<br>Internet Explorer 6&7: 低速です。重い場合は<b>上段の表示設定欄でポリゴン表示をオフ、又は表示上限を設定して下さい。';


function initialize() {
	if (GBrowserIsCompatible()) {
		get_param();
		gl_lang = gl_param["ln"];
		if (typeof(gl_lang) == "undefined") gl_lang = "en";	// safty 
		gl_dest_cd = gl_param["id"].substring(0, 4);
		gl_dest_path = gl_dest[gl_dest_cd].path;
		gl_dest_curr = gl_dest[gl_dest_cd].curr;
		gl_type_cd = gl_param["id"].substring(4, 8);
		gl_param["id"].substring(4, 8)
		//judge mode
		if (gl_param["id"].substring(8, 13) == '00000') {
			gl_mode = "poi_type";
		}
		else {
			if (gl_param["id"].substring(4, 5) == '9') {
				gl_mode = "bounds_path";
			}
			else {
				gl_mode = "poi_poi";
			}
		}
		//alert(gl_mode);
		//gl_type
		for(var type in gl_type){
			gl_type[type].pois = Array();
			gl_type[type].name = gl_type[type]["nm" + gl_lang];
			gl_type[type].base = gl_domain[gl_lang] + gl_dest_path + gl_type[type].path + '/';
			gl_type[type].elink = '<a href="' + gl_type[type].base	+ 'index.html " target="_blank">[' + gl_type[type].name + ']</a>';
			if (typeof(lbl_dwm[type]) == "undefined") {
				gl_type[type].dwm ="";
			}
			else {
				gl_type[type].dwm = ' <span class="sd_note">(' + gl_dest_curr + "/" + lbl_dwm[type][gl_lang] + ")</span>" ;
			}
		}
		//alert(gl_type["0311"].name);
	
		gl_uagent = navigator.userAgent.toLowerCase();
	
		var setting;
		setting = '<form name="form_setting">' + lbl_setting[gl_lang] + ':&nbsp;&nbsp;';
		setting += '<input type="checkbox" style="vertical-align: middle;" name="limit_poly" id="limit_poly" onClick="limit_poly_checked(this.checked)">';
		setting += '<label for="limit_poly">' + lbl_limit_poly[gl_lang] + '</label>&nbsp;&nbsp;&nbsp;&nbsp;';
		setting += lbl_limit_recs[gl_lang] + '&nbsp;<select style="vertical-align: middle;" name="limit_recs" id="limit_recs" onChange="limit_recs_changed(this.selectedIndex);">';
		setting += '<option value="100">100 POIs</option>';
		setting += '<option value="200">200 POIs</option>';
		setting += '<option value="300">300 POIs</option>';
		setting += '<option value="400">400 POIs</option>';
		setting += '<option value="500">500 POIs</option>';
		setting += '<option value="1000">1,000 POIs</option></select>';
		setting += '</form>';
		document.getElementById('setting').innerHTML = setting;
		document.getElementById('box_poi').innerHTML = '<div style="padding: 5px;">' + lbl_tips[gl_lang] + '</div>';
	
		//limit recs
		var limit_recs_rslt ="";
		limit_recs_rslt = get_cookie("LIMIT_RECS");
		if (limit_recs_rslt == '') {	//default set
			document.getElementById("limit_recs").selectedIndex = 5;	//1000POIs
			gl_max_records = document.getElementById("limit_recs").options[5].value;	//1000POIs
		}
		else {
			document.getElementById("limit_recs").selectedIndex = limit_recs_rslt;
			gl_max_records = document.getElementById("limit_recs").options[limit_recs_rslt].value;
		}
	
		//limit poly
		var limit_poly_rslt ="";
		limit_poly_rslt = get_cookie("LIMIT_POLY");
		if (limit_poly_rslt == '') {	//default set
			if(gl_uagent.indexOf("msie") != -1){	//ie
				gl_disp_polygon = false;
			}
			else {
				gl_disp_polygon = true;
			}
		}
		else {
			if (limit_poly_rslt == "true") {
				gl_disp_polygon = true;
			}
			else {
				gl_disp_polygon = false;
			}
		}
		document.getElementById("limit_poly").checked = gl_disp_polygon;
	
		gl_map = new GMap2(document.getElementById("g_map_area"), {size: new GSize(796, 598)});
		gl_map.setUIToDefault();
		gl_map.setMapType(G_HYBRID_MAP);

		//GoogleBar
		var mapOptions = {
			googleBarOptions : {
		  		style : "new",
		  		adsOptions: {
					client: "partner-pub-8451482119501410",
					channel: "AdSense for Search channel",
					adsafe: "off",
					language: gl_lang_iso[gl_lang]
				}
			}
		}
		gl_map.enableGoogleBar();
		
		//Maps Ad Unit
		var publisher_id = 'ca-pub-8451482119501410';
		var adunit_pos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(20, 30));
		var adsManagerOptions = {
			maxAdsOnMap : 10,
			style: 'adunit',
			position: adunit_pos,
			channel: '1315206582'
		};
		adsManager = new GAdsManager(gl_map, publisher_id, adsManagerOptions);
		adsManager.enable();

		//bounds_path
		if (gl_mode == 'bounds_path') {
			var gl_this_lat_any =0;
			var gl_this_lng_any =0;
			if (gl_this_flg == false) {
				document.getElementById('box_type').innerHTML = 'ERROR: No Boundary Set';
			}
			else {
				for (var idx = 0; idx < gl_this_lat.length; idx++) {
					if (gl_this_lat[idx] != 0) {
						gl_this_lat_any = gl_this_lat[idx];
						gl_this_lng_any = gl_this_lng[idx];
						break;
					}
				}
				gl_map.setCenter(new GLatLng(gl_this_lat_any, gl_this_lng_any), 18);
				draw_bound();
				make_param();
				load_poi();
			}
		}
		
		//poi_type
		if (gl_mode == 'poi_type') {
			gl_map.setCenter(new GLatLng(gl_dest[gl_dest_cd].lat, gl_dest[gl_dest_cd].lng), gl_dest[gl_dest_cd].zoom);
			gl_urlstr = '/pois.html?mode=poi_type&' + window.location.search.substring(1) + '&cen1=' + gl_dest[gl_dest_cd].lat + '&cen2=' + gl_dest[gl_dest_cd].lng;
			load_poi();
		}

		//poi_poi
		if (gl_mode == 'poi_poi') {
			if (gl_this_flg == false) {
				document.getElementById('box_type').innerHTML = 'ERROR: No Boundary Set';
			}
			else {
				gl_map.setCenter(new GLatLng(gl_this_lat[0], gl_this_lng[0]), 18);
				draw_bound3();
				make_param();
				load_poi();
			}
		}
	}
}

//bounds_path
function draw_bound() {
	var coord_ne;
	var coord_sw;

 	gl_bounds = new GLatLngBounds();
	for (var idx = 0; idx < gl_this_ep.length; idx++) {
		if (gl_this_gt[idx] == "P") {
			var polygon = new GPolygon.fromEncoded({
				polylines: [{
				points: gl_this_ep[idx],
				levels: gl_this_el[idx],
				color: "#009900",
				opacity: 0.9,
				weight: 10,
				numLevels: 18,
				zoomFactor: 2}],
				fill: false,
				outline: true
			});
		}
		if (gl_this_gt[idx] == "L") {
			var polygon = new GPolyline.fromEncoded({
				points: gl_this_ep[idx],
				levels: gl_this_el[idx],
				color: "#009900",
				opacity: 0.9,
				weight: 10,
				numLevels: 18,
				zoomFactor: 2
			});
		}
		gl_map.addOverlay(polygon);
		tmp_bounds = polygon.getBounds();
		gl_bounds.extend(tmp_bounds.getNorthEast());
		gl_bounds.extend(tmp_bounds.getSouthWest());

	}
	//extend 100m
	coord_ne = gl_bounds.getNorthEast();
	coord_sw = gl_bounds.getSouthWest();
	//special handling
	if (gl_type_cd == "9251" || gl_type_cd == "9252" || gl_type_cd == "9261") {
		gl_factor_lat = gl_factor_lat * 3 //300m
		gl_factor_lng = gl_factor_lng * 3 //300m
	}
	
	gl_bounds.extend(new GLatLng(coord_ne.lat() + gl_factor_lat, coord_ne.lng() + gl_factor_lng));
	gl_bounds.extend(new GLatLng(coord_sw.lat() - gl_factor_lat, coord_sw.lng() - gl_factor_lng));
	resize_view();
}

//poi_type
function draw_bound2() {
	if (gl_pois.poi.length){
		//alert(idx);
		var max_lat = 0;
		var max_lng = 0;
		var min_lat = gl_dest[gl_dest_cd].lat;	//default
		var min_lng = gl_dest[gl_dest_cd].lng;	//default
		for (var idx = 0; idx < gl_pois.poi.length; idx++) {
			//alert(gl_pois.poi[idx].lat + '/' + gl_pois.poi[idx].lng);
			//gl_bounds.extend = new GLatLng(gl_pois.poi[idx].lat, gl_pois.poi[idx].lng);
			if (max_lat < gl_pois.poi[idx].lat) max_lat = gl_pois.poi[idx].lat;
			if (max_lng < gl_pois.poi[idx].lng) max_lng = gl_pois.poi[idx].lng;
			if (min_lat > gl_pois.poi[idx].lat) min_lat = gl_pois.poi[idx].lat;
			if (min_lng > gl_pois.poi[idx].lng) min_lng = gl_pois.poi[idx].lng;
		}
		gl_bounds = new GLatLngBounds(new GLatLng(min_lat, min_lng), new GLatLng(max_lat, max_lng));
		resize_view();
	}
}

//poi_poi
function draw_bound3() {
	var this_icon = new GIcon(G_DEFAULT_ICON);
	var this_coord = new GLatLng(gl_this_lat[0], gl_this_lng[0]);	
	var marker = new GMarker(this_coord, this_icon);
	gl_map.addOverlay(marker);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml('<span class="sd_d2">' + gl_this_name + '</span>');
	});
	
	//extend 1000m
	gl_factor_lat = gl_factor_lat * 5 //500m
	gl_factor_lng = gl_factor_lng * 5 //500m
 	gl_bounds = new GLatLngBounds();
	gl_bounds.extend(new GLatLng(gl_this_lat[0] + gl_factor_lat, gl_this_lng[0] + gl_factor_lng));
	gl_bounds.extend(new GLatLng(gl_this_lat[0] - gl_factor_lat, gl_this_lng[0] - gl_factor_lng));
	resize_view();
}

function resize_view() {
	var arr_vertex = new Array();
	var new_zlevel = gl_map.getBoundsZoomLevel(gl_bounds);
	//alert(new_zlevel);
	//set minimum zoom
	if (new_zlevel > 16) {
		new_zlevel = 16	
	}
	gl_map.setZoom(new_zlevel);
	gl_map.setCenter(gl_bounds.getCenter());
	arr_vertex = latlng_vertex(gl_bounds);
	var view_org = new GPolygon(arr_vertex, "#0000FF", 10, 0.7, "#0000FF", 0);
	gl_map.addOverlay(view_org);
}

function make_param() {
	//alert(gl_type_cd);
	gl_urlstr ="";
	//repetitive calc after extention, but OK.
	coord_ne = gl_bounds.getNorthEast();
	coord_sw = gl_bounds.getSouthWest();
	coord_cen = gl_bounds.getCenter();
	//shorten
	coord_ne_lat = coord_ne.lat(); coord_ne_lat = coord_ne_lat.toFixed(7);
	coord_ne_lng = coord_ne.lng(); coord_ne_lng = coord_ne_lng.toFixed(7);
	coord_sw_lat = coord_sw.lat(); coord_sw_lat = coord_sw_lat.toFixed(7);
	coord_sw_lng = coord_sw.lng(); coord_sw_lng = coord_sw_lng.toFixed(7);
	coord_cen_lat = coord_cen.lat(); coord_cen_lat = coord_cen_lat.toFixed(7);
	coord_cen_lng = coord_cen.lng(); coord_cen_lng = coord_cen_lng.toFixed(7);

	qs_common = '&' + window.location.search.substring(1);
	qs_mode ="";
	qs_custom ="";
	qs_coord_box = '&ne1=' + coord_ne_lat + '&ne2=' + coord_ne_lng + '&sw1=' + coord_sw_lat + '&sw2=' + coord_sw_lng;
	qs_coord_cen = '&cen1=' + coord_cen_lat + '&cen2=' + coord_cen_lng;

	switch(gl_type_cd) {
		case "9112":	//Sub Area
		case "9231":	//Soi
		case "9251":	//Rotary
		case "9252":	//Intersection
		case "9261":	//Bridge
			qs_mode = 'bounds';
			qs_custom = qs_coord_box;
			break;
		case "9211":	//Expressway
		case "9221":	//Road
			qs_mode = 'road';
			qs_custom = '&rd=' + gl_this_road + qs_coord_cen;
			break;
		case "9151":	//Prov
			qs_mode = 'prov';
			qs_custom = '&pv=' + gl_this_prov;
			break;
		case "9152":	//Dist
			qs_mode = 'dist';
			qs_custom = '&pv=' + gl_this_prov + '&di=' + gl_this_dist;
			break;
		case "9153":	//Subd
			qs_mode = 'subd';
			qs_custom = '&pv=' + gl_this_prov + '&di=' + gl_this_dist + '&sd=' + gl_this_subd;
			break;
		case "9121":	//Zone
			qs_mode = 'zone';
			qs_custom = '&zn=' + gl_this_zone;
			break;
		case "9111":	//Area
			//qs_mode = '/poi_area.html?';
			qs_mode = 'area';
			qs_custom = '&ar=' + gl_this_area + qs_coord_cen;
			break;
		default:	//poi_poi
			qs_mode = 'bounds';
			qs_custom = qs_coord_box;
			break;
	}
	gl_urlstr = '/pois.html?mode=' + qs_mode + qs_common + qs_custom ;
	//alert(gl_urlstr);
}


function load_poi() {
	var time_bgn = new Date();
	gl_blink_msg = lbl_status_loading[gl_lang];
	disp_loading_msg();
	var request = GXmlHttp.create();
	request.open('GET', gl_urlstr , true);
	request.onreadystatechange = function () {
		if (request.readyState == 4 && request.status == 200) {
			var time_end = new Date();
			var json_string = request.responseText;
			//alert(json_string);
			gl_pois = eval("(" + json_string + ")");
			//alert(gl_pois);
			var tinyIcon = new GIcon();
			tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
			tinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			tinyIcon.iconSize = new GSize(12, 20);tinyIcon.shadowSize = new GSize(22, 20);
			tinyIcon.iconAnchor = new GPoint(6, 20);
			tinyIcon.infoWindowAnchor = new GPoint(5, 1);
			var tmp_str ='';
			var key_type ='';
			var show_len =0;
			show_len = cutoff_length(gl_lang);
			if (gl_pois.poi.length){
				if (gl_pois.poi.length > gl_max_records) {
					 gl_pois.poi.splice(gl_max_records, gl_pois.poi.length - gl_max_records);
				}
				for (var idx = 0; idx < gl_pois.poi.length; idx++) {
					//Type - push
					key_type = gl_pois.poi[idx].type;
					if (typeof(gl_type[key_type]) == "undefined") {
						;
					}
					else {
						gl_type[key_type].pois.push(idx);
					}

					//Edit - InfoWindow
					gl_pois.poi[idx].path = gl_type[key_type].base + gl_pois.poi[idx].nkey + '.html';
					gl_pois.poi[idx].info = '<span class="sd_d2">' + gl_type[key_type].elink + '<br>&nbsp;<b><a href="' 
						+ gl_pois.poi[idx].path + '" target="_blank">' 
						+ gl_pois.poi[idx].nm.replace(" - ", "<br>&nbsp;&nbsp;") + '</b>';
					if (gl_pois.poi[idx].rate != 0) {
						gl_pois.poi[idx].info += '</br>&nbsp;&nbsp;&nbsp;<i>from ' + gl_dest_curr + '</i>&nbsp;<b>' 
						+ gl_pois.poi[idx].rate + '</b>/' + lbl_dwm[key_type][gl_lang] +'</b>';
					}
					gl_pois.poi[idx].info += '</a></span>';

					//Edit - Poi Box
					tmp_str ='';
					if (gl_pois.poi[idx].nm.length > show_len) {
						tmp_str = gl_pois.poi[idx].nm.substring(0, show_len-2) + '..';
					}
					else {
						tmp_str = gl_pois.poi[idx].nm;
					}
					if (gl_pois.poi[idx].rate != 0) {
						tmp_str += '&nbsp;(' + gl_pois.poi[idx].rate + 'B)';
					}
					gl_pois.poi[idx].show = '<a href="' + gl_pois.poi[idx].path + '" target="_blank" onmouseover="poi_focus(' 
					+ idx + ')" onmouseout="poi_unfocus(' + idx + ')"><span id="poi_' + idx + '">' + tmp_str + '</span></a>';
	
					//POINT
					gl_pois.poi[idx].poi_coord = new GLatLng(gl_pois.poi[idx].lat, gl_pois.poi[idx].lng);
					gl_pois.poi[idx].point = new GMarker(gl_pois.poi[idx].poi_coord, tinyIcon);
					gl_map.addOverlay(gl_pois.poi[idx].point);
					//POLYGON
					gl_pois.poi[idx].polygon ="";
					if (gl_disp_polygon==true && gl_pois.poi[idx].gt == 'P' && gl_pois.poi[idx].ep!="") {	//later criteria:  if (xxx.polygon)
						gl_pois.poi[idx].polygon = add_polygon_poi(idx);
						gl_map.addOverlay(gl_pois.poi[idx].polygon);
					}

					//POLYLINE
					gl_pois.poi[idx].polyline ="";
					if (gl_disp_polygon==true && gl_pois.poi[idx].gt == 'L' && gl_pois.poi[idx].ep!="") {	//later criteria:  if (xxx.polyline)
						gl_pois.poi[idx].polyline = add_polyline_poi(idx);
						gl_map.addOverlay(gl_pois.poi[idx].polyline);
					}

					//EVENT
					add_listener_point(idx);
					
					if (gl_pois.poi[idx].polygon) {
						add_listener_polygon(idx);
					}
					if (gl_pois.poi[idx].polyline) {
						add_listener_polyline(idx);
					}

					//MISC
					gl_pois.poi[idx].focused = false;
				}
				
				//Type - display gl_type
				var box_type_str ='';
				if (gl_pois.poi.length) {
					box_type_str = '<span class="highlight">&nbsp;' + lbl_highlight[gl_lang] + '&nbsp;</span>&nbsp;&nbsp;';
					box_type_str += '<a href="JavaScript:void(0)" class="button_type" style ="text-decoration: none;" onClick="check_all(true);">' + lbl_check_all[gl_lang] 
						+ '</a>&nbsp;&nbsp;<a href="JavaScript:void(0)" class="button_type" style ="text-decoration: none;" onClick="check_all(false);">' + lbl_clear_all[gl_lang] 
						+ '</a>&nbsp;&nbsp;<a href="JavaScript:void(0)" class="button_type" style ="text-decoration: none;"' + "onClick=\"type_focus('0000');\">"
						+ lbl_refresh[gl_lang] + '</a>';
					//stopwatch
					var msec = (time_end - time_bgn)/1000;
					var gl_server_name = location.hostname;
					gl_server_name = gl_server_name.replace("map.", "");
					box_type_str += " sec: " + msec.toFixed(1) + ", sql:" + gl_pois.ctrl[0].ope + " (" + gl_server_name + "-" + gl_pois.ctrl[0].from + ")";
					box_type_str += '<form name="form_type" class="sd_d2">';

					//sort order by number (avoid ie showing 1xxx code first, 01xx later.)
					var sort_type = new Array();
					var i =0;
					var type ="";
					for (var type in gl_type) {
						sort_type[i++] = parseInt(type.replace( /^0+([0-9]+)/, "$1" ));
					}
					sort_type.sort(function (a,b){return a - b});
					for (var i = 0; i < sort_type.length; i++) {
						type = ("0000" + sort_type[i]).slice( -4 );
						if (gl_type[type].pois.length) {
						
							box_type_str +=  '<nobr><input type="checkbox" style="vertical-align: middle;" name="check_type" id="type_input_' + type + "\" onClick=\"type_focus('" 
										+ type + "');\"><label for=\"type_input_" + type + '" id="type_label_' + type+ '">' + gl_type[type].name 
										+ ' (' + gl_type[type].pois.length + ')</label></nobr>, ';
						}
					}
					document.getElementById('box_type').innerHTML = box_type_str.substring(0, box_type_str.length-2) + '</form>';
				}
				else {
					document.getElementById('box_type').innerHTML = lbl_nopoi_all[gl_lang];
				}
				if (gl_mode == 'poi_type') {
					draw_bound2();
				}
				gl_blink_msg = lbl_status_complete[gl_lang];
			}
			else {
				gl_blink_msg = lbl_status_complete[gl_lang];
				document.getElementById('box_type').innerHTML = 'INFO: No POI in this Boundary';
			}
		}
	}
	request.send(null);
}


//poi handling functions
var gl_polygon;	//save memory
function add_polygon_poi(idx) {
	gl_polygon = new GPolygon.fromEncoded({
		polylines: [{
		points: gl_pois.poi[idx].ep,
		levels: gl_pois.poi[idx].el,
		color: "#0000FF",
		opacity: 0.9,
		weight: 2,
		numLevels: 18,
		zoomFactor: 2}],
		fill: true,
		color: "#0000FF",
		opacity: 0.1,
		outline: true
	});
	return gl_polygon;
}

var gl_polyline;	//save memory
function add_polyline_poi(idx) {
	gl_polyline = new GPolyline.fromEncoded({
		points: gl_pois.poi[idx].ep,
		levels: gl_pois.poi[idx].el,
		color: "#0000FF",
		opacity: 0.9,
		weight: 2,
		numLevels: 18,
		zoomFactor: 2
	});
	return gl_polyline;
}


function add_listener_point(idx) {
	GEvent.addListener(gl_pois.poi[idx].point, "mouseover", function() {
		gl_pois.poi[idx].point.openInfoWindowHtml(gl_pois.poi[idx].info);
		if (gl_pois.poi[idx].focused == false) {
			gl_pois.poi[idx].point.setImage("http://labs.google.com/ridefinder/images/mm_20_red.png");
			if (gl_pois.poi[idx].polygon) {
				gl_pois.poi[idx].polygon.setFillStyle({color:"#BB0000"});
				gl_pois.poi[idx].polygon.setStrokeStyle({color:"#BB0000"});
			}
		}
	});
	GEvent.addListener(gl_pois.poi[idx].point, "mouseout", function() {
		if (gl_pois.poi[idx].focused == false) {
			gl_pois.poi[idx].point.setImage("http://labs.google.com/ridefinder/images/mm_20_blue.png");
			if (gl_pois.poi[idx].polygon) {
				gl_pois.poi[idx].polygon.setFillStyle({color:"#0000FF"});
				gl_pois.poi[idx].polygon.setStrokeStyle({color:"#0000FF"});
			}
		}
	});
	
	GEvent.addListener(gl_pois.poi[idx].point, "click", function() {
		window.open(gl_pois.poi[idx].path);
	});
}


function add_listener_polygon(idx) {
	gl_pois.poi[idx].event_polygon_mouseover = GEvent.addListener(gl_pois.poi[idx].polygon, "mouseover", function() {
		gl_pois.poi[idx].point.openInfoWindowHtml(gl_pois.poi[idx].info);
		if (gl_pois.poi[idx].focused == false) {
			gl_pois.poi[idx].point.setImage("http://labs.google.com/ridefinder/images/mm_20_red.png");
			gl_pois.poi[idx].polygon.setFillStyle({color:"#BB0000"});
			gl_pois.poi[idx].polygon.setStrokeStyle({color:"#BB0000"});
		}
	});
	gl_pois.poi[idx].event_polygon_mouseout = GEvent.addListener(gl_pois.poi[idx].polygon, "mouseout", function() {
		if (gl_pois.poi[idx].focused == false) {
			gl_pois.poi[idx].point.setImage("http://labs.google.com/ridefinder/images/mm_20_blue.png");
			gl_pois.poi[idx].polygon.setFillStyle({color:"#0000FF"});
			gl_pois.poi[idx].polygon.setStrokeStyle({color:"#0000FF"});
		}
	});
	gl_pois.poi[idx].event_polygon_click = GEvent.addListener(gl_pois.poi[idx].polygon, "click", function() {
		window.open(gl_pois.poi[idx].path)
	});
}


function add_listener_polyline(idx) {
	gl_pois.poi[idx].event_polyline_mouseover = GEvent.addListener(gl_pois.poi[idx].polyline, "mouseover", function() {
		gl_pois.poi[idx].point.openInfoWindowHtml(gl_pois.poi[idx].info);
		if (gl_pois.poi[idx].focused == false) {
			gl_pois.poi[idx].point.setImage("http://labs.google.com/ridefinder/images/mm_20_red.png");
			gl_pois.poi[idx].polyline.setStrokeStyle({color:"#BB0000"});
		}
	});
	gl_pois.poi[idx].event_polyline_mouseout = GEvent.addListener(gl_pois.poi[idx].polyline, "mouseout", function() {
		if (gl_pois.poi[idx].focused == false) {
			gl_pois.poi[idx].point.setImage("http://labs.google.com/ridefinder/images/mm_20_blue.png");
			gl_pois.poi[idx].polyline.setStrokeStyle({color:"#0000FF"});
		}
	});
	gl_pois.poi[idx].event_polyline_click = GEvent.addListener(gl_pois.poi[idx].polyline, "click", function() {
		window.open(gl_pois.poi[idx].path)
	});
}


function limit_recs_changed(idx) {
	set_cookie("LIMIT_RECS", idx, 1);
	location.reload();
}


function limit_poly_checked(mode) {
	set_cookie("LIMIT_POLY", mode, 1);
	for (var idx = 0; idx < gl_pois.poi.length; idx++) {
		if (gl_pois.poi[idx].ep != "") {
			if (mode) {
				gl_pois.poi[idx].polygon = add_polygon_poi(idx);
				gl_map.addOverlay(gl_pois.poi[idx].polygon);
				add_listener_polygon(idx);
			}
			else {
				GEvent.removeListener(gl_pois.poi[idx].event_polygon_mouseover);
				GEvent.removeListener(gl_pois.poi[idx].event_polygon_mouseout);
				GEvent.removeListener(gl_pois.poi[idx].event_polygon_click);
				gl_map.removeOverlay(gl_pois.poi[idx].polygon);
				gl_pois.poi[idx].polygon = "";
			}
		}
	}
}


function type_focus(type_now){
	var box_poi_str ='';
	var idx =0;
	var row_cnt =0;
	var page_cnt =0;
	var page_now =0;
	var snap_bounds;
	var snap_center;
	var arr_vertex = Array();

	if (gl_snap_polygon) gl_map.removeOverlay(gl_snap_polygon);
	if (gl_snap_point) gl_map.removeOverlay(gl_snap_point);
	//show pixel bounds
	
	arr_vertex = pixel_bounds(10);
	gl_snap_polygon = new GPolygon(arr_vertex, "#BB0000", 10, 0.7, "#BB0000", 0);
	gl_map.addOverlay(gl_snap_polygon);
	//show cross mark
	snap_center = gl_map.getCenter();
	var crossIcon = new GIcon();
	crossIcon.image = "/static/cross_marker.gif";
	crossIcon.iconSize = new GSize(39, 39);
	crossIcon.iconAnchor = new GPoint(20, 20);
	gl_snap_point = new GMarker(snap_center, crossIcon);
	gl_map.addOverlay(gl_snap_point);
	//get latlng bounds
 	snap_bounds = gl_map.getBounds();

	for (var type in gl_type) {
		if (gl_type[type].pois.length) {
			if(document.getElementById('type_input_' + type).checked) {
				document.getElementById('type_label_' + type).className = 'sd_red';
				row_cnt =0;
				if (type == type_now) {
					page_now = page_cnt;
				}
				if (page_cnt == 0) {
					if (type==type_now || type_now=='0000' || type_now=='9999') {
						box_poi_str += '<td class="table_poi_td" style="border-left: none; background-color: #FFDDDD;">';
					}
					else {
						box_poi_str += '<td class="table_poi_td" style="border-left: none;">';
					}
				}
				else {
					if (type==type_now || type_now=='0000' || type_now=='9999') {
						box_poi_str += '<td class="table_poi_td" style="background-color: #FFDDDD;">';
					}
					else {
						box_poi_str += '<td class="table_poi_td">';
					}
				}
				box_poi_str += '<nobr><span class="sd_bold">' + gl_type[type].elink  + gl_type[type].dwm + '</span></nobr></br>';
				page_cnt++;
				for (idx = 0; idx < gl_type[type].pois.length; idx++) {
					if (snap_bounds.containsLatLng(gl_pois.poi[gl_type[type].pois[idx]].poi_coord)) {
						if (gl_pois.poi[gl_type[type].pois[idx]].focused != true) {
							gl_pois.poi[gl_type[type].pois[idx]].focused = true;
							gl_pois.poi[gl_type[type].pois[idx]].point.setImage("http://labs.google.com/ridefinder/images/mm_20_red.png");
							if (gl_pois.poi[gl_type[type].pois[idx]].polygon) {
								gl_pois.poi[gl_type[type].pois[idx]].polygon.setFillStyle({color:"#BB0000"});
								gl_pois.poi[gl_type[type].pois[idx]].polygon.setStrokeStyle({color:"#BB0000"});
							}
							if (gl_pois.poi[gl_type[type].pois[idx]].polyline) {
								gl_pois.poi[gl_type[type].pois[idx]].polyline.setStrokeStyle({color:"#BB0000"});
							}
						}
						if (row_cnt%10==0 && row_cnt!=0) {
							if (type==type_now || type_now=='0000' || type_now=='9999') {
								box_poi_str += '<td class="table_poi_td" style="border-left: solid 1px #CCCCCC; background-color: #FFDDDD;"></br>';
							}
							else {
								box_poi_str += '<td class="table_poi_td" style="border-left: solid 1px #CCCCCC"></br>';
							}
							page_cnt++;
						}
						box_poi_str +=  '<nobr>' + gl_pois.poi[gl_type[type].pois[idx]].show + '</nobr></br>';
						if (row_cnt%10==9 || idx==gl_type[type].pois.length-1) { box_poi_str += '</td>'; }
						row_cnt++;
					}
					else {
						if (gl_pois.poi[gl_type[type].pois[idx]].focused != false) {
							gl_pois.poi[gl_type[type].pois[idx]].focused = false;
							gl_pois.poi[gl_type[type].pois[idx]].point.setImage("http://labs.google.com/ridefinder/images/mm_20_blue.png");
							if (gl_pois.poi[gl_type[type].pois[idx]].polygon) {
								gl_pois.poi[gl_type[type].pois[idx]].polygon.setFillStyle({color:"#0000FF"});
								gl_pois.poi[gl_type[type].pois[idx]].polygon.setStrokeStyle({color:"#0000FF"});
							}
							if (gl_pois.poi[gl_type[type].pois[idx]].polyline) {
								gl_pois.poi[gl_type[type].pois[idx]].polyline.setStrokeStyle({color:"#0000FF"});
							}
						}
					}
				}
				if (row_cnt == 0) {
					box_poi_str += '<nobr>&nbsp;' + lbl_nopoi_all[gl_lang] +'</nobr><br>';
				}
			
			}
			else {
				document.getElementById('type_label_' + type).className = '';
				for (idx = 0; idx < gl_type[type].pois.length; idx++) {
					if (gl_pois.poi[gl_type[type].pois[idx]].focused != false) {
						gl_pois.poi[gl_type[type].pois[idx]].focused = false;
						gl_pois.poi[gl_type[type].pois[idx]].point.setImage("http://labs.google.com/ridefinder/images/mm_20_blue.png");
						if (gl_pois.poi[gl_type[type].pois[idx]].polygon) {
							gl_pois.poi[gl_type[type].pois[idx]].polygon.setFillStyle({color:"#0000FF"});
							gl_pois.poi[gl_type[type].pois[idx]].polygon.setStrokeStyle({color:"#0000FF"});
						}
						if (gl_pois.poi[gl_type[type].pois[idx]].polyline) {
							gl_pois.poi[gl_type[type].pois[idx]].polyline.setStrokeStyle({color:"#0000FF"});
						}
					}
				}
			}
		}
	}
	if (page_cnt == 0) {
		if (type_now=='0000') {
			box_poi_str += '<nobr>&nbsp;' + lbl_nopoi_refresh[gl_lang] +'</nobr><br>';
		}
		if (type_now=='9999') {
			box_poi_str += '<nobr>&nbsp;' + lbl_nopoi_clear[gl_lang] +'</nobr><br>';
		}
		
	}
	if (page_cnt > 0) {
		box_poi_str += '<td class="table_poi_td">&nbsp;</td>';	//to display border-left

	}
	document.getElementById('box_poi').innerHTML = '<table class="table_poi" cellpadding="0" cellspacing="0"><tr class="sd_d2">' + box_poi_str + '</tr></table>';
	if (page_now > 0) {
		table_scroll(page_now);
	}
}


function check_all(check) {
	for(var count = 0; count < document.form_type.check_type.length; count++){
		document.form_type.check_type[count].checked = check;
	}
	if (check) {
		type_focus('0000');
	}
	else {
		type_focus('9999');
	}
}


function poi_focus(idx) {
	gl_pois.poi[idx].point.openInfoWindowHtml(gl_pois.poi[idx].info);
}


function poi_unfocus(idx) {
	//gl_pois.poi[idx].point.closeInfoWindow();
}


//other functions
function get_param() { 
	var query = window.location.search.substring(1);
	var parms = query.split('&'); 
	for (var i=0; i<parms.length; i++) { 
		var pos = parms[i].indexOf('='); 
		if (pos > 0) { 
			var key = parms[i].substring(0,pos); 
			var val = parms[i].substring(pos+1); 
			gl_param[key] = val; 
		} 
	} 
} 


function cutoff_length(lang) {
	var len =0;
	switch(lang) {
		case "th":
			len = 20;
			break;
		case "jp":
			len = 14;
			break;
		default:
			len = 20;
			break;
	}
	return len
}


function table_scroll(number) {
	var L = document.getElementById('box_poi');
	var T = L.getElementsByTagName('table')[0];
	L.scrollLeft = T.clientLeft + T.rows[0].cells[number].offsetLeft;
}


function pixel_bounds(os){
	var arr_vertex = Array();
	var x =796;
	var y =598;
	var ua_ie =0;

	gl_uagent = navigator.userAgent.toLowerCase();
	if(gl_uagent.indexOf("msie") != -1){	//ie
		ua_ie = 4;
	}
	arr_vertex[0] = gl_map.fromContainerPixelToLatLng(new GPoint(0+os, 0+os));
	arr_vertex[1] = gl_map.fromContainerPixelToLatLng(new GPoint(x-os -ua_ie, 0+os));
	arr_vertex[2] = gl_map.fromContainerPixelToLatLng(new GPoint(x-os -ua_ie, y-os -ua_ie));
	arr_vertex[3] = gl_map.fromContainerPixelToLatLng(new GPoint(0+os, y-os -ua_ie));
	arr_vertex[4] = gl_map.fromContainerPixelToLatLng(new GPoint(0+os, 0+os));
	return arr_vertex;
}


function latlng_vertex(bounds) {	//not used for now
	var coord_ne;
	var coord_sw;
	var arr_vertex = new Array();
	
	coord_ne = bounds.getNorthEast();
	coord_sw = bounds.getSouthWest();
	arr_vertex[0] = new GLatLng(coord_ne.lat(), coord_sw.lng());
	arr_vertex[1] = coord_ne;
	arr_vertex[2] = new GLatLng(coord_sw.lat(), coord_ne.lng());
	arr_vertex[3] = coord_sw;
	arr_vertex[4] = new GLatLng(coord_ne.lat(), coord_sw.lng());
	return arr_vertex;
}


var gl_blink_msg;
var gl_blink_speed = 1000;
var gl_blink_flag = 0;
function disp_loading_msg() {
	if(gl_blink_flag == 0){
		document.getElementById('pindicator').innerHTML = lbl_status_common[gl_lang] + gl_blink_msg;
		gl_blink_flag = 1;
	}
	else{
		document.getElementById('pindicator').innerHTML = "";
		gl_blink_flag = 0;
	}
	if (gl_blink_msg == lbl_status_complete[gl_lang]) {
		document.getElementById('pindicator').innerHTML = lbl_status_common[gl_lang] + gl_blink_msg + "[ <b>" + gl_pois.poi.length + "</b> POIs ]";
	}
	else {
		setTimeout("disp_loading_msg()", gl_blink_speed);
	}
}


function set_cookie(myCookie,myValue,myDay){
   myExp = new Date();
   myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000));
   myItem = myCookie + "=" + escape(myValue) + ";";
   myExpires = "expires=" + myExp.toGMTString() + ";";
   myPath = "path=" + "/";
   document.cookie =  myItem + myExpires + myPath;
}


function get_cookie(myCookie) {
	mck = document.cookie + ";";
	index1 = mck.indexOf(myCookie, 0);
	if (index1 != -1) {
		mck = mck.substring(index1, mck.length);
		index2 = mck.indexOf ("=", 0) + 1;
		index3 = mck.indexOf (";", index2);
		return(unescape(mck.substring(index2, index3)));
	}
	return("");
}

