	// 地図上に表示する最大企業数
	var COMPANY_MAX = 100;

	var map = null;
	var geocoder = null;
	var points = new Array();
	var gmarkers = new Array();
	var htmls = new Array();
	var lats = new Array();
	var lngs = new Array();
	var companies = new Array();
	var list = new Array();
	var i = 0;
	var map_pos = 0;
	var list_pos = 0;
	var flag_win_open = false;
	var sidebar_html;
	var start_lng = "137.73441";
	var start_lat = "34.70371";
	var map_size = 11;
	var search_keyword = "none";
	var search_category = "none";
	var loaded = false;

	var point;

	// GClientGeocoderを初期化
	geocoder = new GClientGeocoder();

	// 初期化

	function loadGMap() {
		map = new GMap2(document.getElementById("show_map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());
		map.setCenter(new GLatLng(start_lat, start_lng), map_size);
//		map.setCenter(new GLatLng(34.71195826377707, 137.7276778221304), 17);

//		geocoder = new GClientGeocoder();

		// ドラッグで移動終了後にエリアに対応するマーカーを表示 
		GEvent.addListener(map, "moveend", function() { 
			if (flag_win_open) {
				flag_win_open = false;
			} else {
				map.clearOverlays();
				PlotMarker(map); 
			}
		});
		GEvent.addListener(map, "zoom", function() { 
			if (! flag_win_open) {
				map.clearOverlays();
				PlotMarker(map); 
			}
		});
		GEvent.addListener(map, "infowindowopen", function() { 
			flag_win_open = true;
		});
		GEvent.addListener(map, "infowindowclose", function() { 
			flag_win_open = false;
		});

		GEvent.addListener(map, 'click', onGMapClick);

		map.clearOverlays();
		PlotMarker(map);
	}

	function onGMapClick(overlay, point) {
//		alert(point.x+"::"+point.y);
	}

	// 住所検索
	function showAddress(address) {
		var  txt;
		if (geocoder) {
//			geocoder.getLatLng(
			geocoder.getLocations(
				address,
				function(res) {
					if ((! res.Placemark)) {
						alert(address + "が見つかりません。\ngoogleのデータが新住所に対応していない可能性があります。");
					} else if (res.Placemark.length == 0) {
						alert(address + "が見つかりません。");
					} else {
					map_size = 18;
						var s_add = res.Placemark[0].AddressDetails.Country.AddressLine[0];
						var s_point = res.Placemark[0].Point;
						point = new GLatLng(s_point.coordinates[1], s_point.coordinates[0]);
						map.setCenter(point, 18);
						map.clearOverlays();
						if (s_add.indexOf('静岡') == -1) {
							alert('表示されているは「'+s_add+"」です。\n浜松市内をお探しの場合は「浜松市●●区●●町」としてください。");
						}
					}
				}
			);
			PlotMarker(map);
		}
	}

	// マーカー表示
	function PlotMarker(map){ 

		document.getElementById('map_infobar').style.display = "block";
		document.getElementById('map_infobar').innerHTML = "ただいま企業データを取得しています...";

		var wbounds = map.getBounds();
		var sw = wbounds.getSouthWest();
		var ne = wbounds.getNorthEast();
		var param;
		var url;

		url = '/exec/map_info/';
		param = 'mode=l&s_lng=' + sw.lng()+"&s_lat="+sw.lat()+"&n_lng="+ne.lng()+"&n_lat="+ne.lat();
		if (document.getElementById("in_company_name").value != "") { param += '&company_name='+document.getElementById("in_company_name").value }
		if (document.getElementById("in_company_representative_name").value != "") { param += '&company_representative_name='+document.getElementById("in_company_representative_name").value }
		if (document.getElementById("in_business_comment").value != "") { param += '&business_comment='+document.getElementById("in_business_comment").value }
		if (document.getElementById("in_municipality").value != "") { param += '&municipality='+document.getElementById("in_municipality").value }
		if (document.getElementById("in_town").value != "") { param += '&town='+document.getElementById("in_town").value }
		if (document.getElementById("in_business_category_major").value != "") { param += '&business_category_major='+document.getElementById("in_business_category_major").value }
		if (document.getElementById("in_business_category").value != "") { param += '&business_category='+document.getElementById("in_business_category").value }
		if (document.getElementById("in_member").value != "") { param += '&member='+document.getElementById("in_member").value }
		if (document.getElementById("in_employees").value != "") { param += '&employees='+document.getElementById("in_employees").value }
		if (document.getElementById("in_employees2").value != "") { param += '&employees2='+document.getElementById("in_employees2").value }
		if (document.getElementById("in_capital").value != "") { param += '&capital='+document.getElementById("in_capital").value }
		if (document.getElementById("in_capital2").value != "") { param += '&capital2='+document.getElementById("in_capital2").value }
		if (document.getElementById("in_initiation").value != "") { param += '&initiation='+document.getElementById("in_initiation").value }
		if (document.getElementById("in_initiation2").value != "") { param += '&initiation2='+document.getElementById("in_initiation2").value }

		// XMLHttpRequestオブジェクトを生成
		var request = GXmlHttp.create();

		request.open("POST",url,true);
		request.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
		request.send(param);

		// コールバック関数
		request.onreadystatechange = function() { 
			if (request.readyState == 4) { 
				var res = request.responseXML; 
				// XMLのmarkerタグ要素の配列markersを作る 
				var count = res.documentElement.getElementsByTagName("count"); 
				sidebar_html = "";
				htmls = new Array();
				lats = new Array();
				lngs = new Array();
				list = new Array();
				list_pos = 0;
/*				points = new Array();
				companies = new Array();*/
				map_pos = 0;

				if (count[0].getAttribute("value") > COMPANY_MAX) {
					document.getElementById('map_infobar').style.display = "block";
					document.getElementById('map_infobar').innerHTML = "地図の表示が非常に遅くなるため、<br>件数が" + COMPANY_MAX + "件を超えた場合には企業のポイント表示は表示できません。<br><br>地図の左上にある「縮尺変更」ボタンをプラス方向に動かして、縮尺を変更してください。";
					Windows.closeAll();
				} else {
					var markers = res.documentElement.getElementsByTagName("marker"); 
					document.getElementById('map_infobar').style.display = "none";
					// forループで地図上にマーカーを1つずつプロットしていく（※3） 
					// perseFloat関数は与えられた文字型の引数を実数値に変換する関数 
					for (var i = 0; i < markers.length; i++) { 
						var name = markers[i].getAttribute("name");
						var tel = markers[i].getAttribute("tel");
						var member_flg = markers[i].getAttribute("member_flg");
						var lat = parseFloat(markers[i].getAttribute("lat"));
						var lng = parseFloat(markers[i].getAttribute("lng"));
						if (member_flg == '1') {
							member_img = '<img src="/images/ccimark.gif" width="27" height="18" align="absmiddle" alt="浜松商工会議所会員" />';
						} else {
							member_img = '<img src="/images/blank.gif" width="27" height="18" align="absmiddle" />';
						}
						var html = member_img+"<strong>"+name+'</strong><br>'+ markers[i].getAttribute("address") + '<br><div class="tel">' + markers[i].getAttribute("tel")+'</div><div class="link"><a href="javascript:void(0)" onclick="'+"openResult('/exec/company_info/"+markers[i].getAttribute("id")+"/'"+')">&gt;&gt;詳細情報を見る</a></div><div style="clear: both"></div>';
						MarkerCheck(lat, lng, name, html);
//					document.getElementById('sidebar').innerHTML = sidebar_html;
					}

					// markerを描画
					for(var i = 0; i < map_pos; i++) {
						var point = points[i];
						htmls[i] = '<div class="baroon">【この周辺にある企業】<hr>' + htmls[i];
						if (companies[i] > 2) {
							htmls[i] = '<div class="baroon_inner">' + htmls[i] + '</div>';
						}
						htmls[i] = htmls[i] + "</div>";
				        var marker = SetMarker(point, i);
				        gmarkers[i] = marker;
						map.addOverlay(marker);
					}

					ShowList(1);
				}
			}
		}
		point = map.getCenter();
	}

	function ShowList(pageno) {
		if (pageno == 'undefined') {
			pageno = 1;
		}
		var start_pos = (pageno - 1) * 25;
		if (start_pos > list.length) {
			start_pos = 0;
			before_page = 0;
		} else {
			before_page = pageno - 1;
		}

		var end_pos = start_pos + 25;
		if (end_pos >= list.length) {
			end_pos = list.length;
			after_page = 999;
		} else {
			after_page = before_page + 2;
		}

		var HTML = "";

		if (list.length == 0) {
			HTML = '0件';
		} else {
			HTML = list.length + '件中: ' + (start_pos + 1) +'件 ～ ' + end_pos + '件<br />';
		}

		if (before_page > 0) {
			HTML += '<a href="javascript:ShowList('+before_page+')">前へ</a>　';
		}
		if (after_page < 999) {
			HTML += '<a href="javascript:ShowList('+after_page+')">次へ</a>';
		}

		HTML += '<br /><br />';

		for(i=start_pos;i<end_pos;i++) {
			HTML += list[i];
		}

		var win = new Window({className: "dialog", width:180, height:555, zIndex: 100, title: "地図上の企業一覧", closable: false, wiredDrag: false, resizable:false, maximizable:false, minimizable:false, draggable:true });
		Windows.closeAll();
		win.getContent().innerHTML= HTML;
		//win.setStatusBar("Status bar info");
		win.setLocation(190, 780);
		win.show();		
	}

	// マーカー位置をチェック
	function MarkerCheck(lat, lng, name, html) {
		var point_exist_flg = false;

      	// マーカー重複チェック
		for(latpos = 0; latpos<lats.length; latpos++) {
			if (lats[latpos] == lat) {
				if (lngs[latpos] == lng) {
					point_exist_flg = true;
					break;
				}
			}
		}

		if (point_exist_flg) {
			htmls[latpos] += "<hr>"+html;
			companies[latpos]++;
			list[list_pos] = '<a href="javascript:ShowInfoWindow(' + latpos + ')">' + name + '<\/a><br />';
		} else {
			var point = new GLatLng(lat, lng);
			points[map_pos] = point;
			lats[map_pos] = lat;
			lngs[map_pos] = lng;
			htmls[map_pos] = html;
			companies[map_pos] = 1;
			list[list_pos] = '<a href="javascript:ShowInfoWindow(' + map_pos + ')">' + name + '<\/a><br />';
			map_pos++;
		}
		list_pos++;
	}

	function SetMarker(point, i) {
		var marker = new GMarker(point);
		GEvent.addListener(marker, "click", function() { ShowInfoWindow(i); });
		return marker;
	}

	function ShowInfoWindow(i) {
		var html = htmls[i];
		gmarkers[i].openInfoWindowHtml(html);
	}
 
	function SetStartPos(pos) {
		switch(pos) {
			case "naka":
				start_lng = "137.70555";
				start_lat = "34.72341";
				map_size = 13;
				break;
			case "higashi":
				start_lng = "137.76340";
				start_lat = "34.75430";
				map_size = 13;
				break;
			case "nishi":
				start_lng = "137.63053";
				start_lat = "34.72919";
				map_size = 13;
				break;
			case "minami":
				start_lng = "137.74280";
				start_lat = "34.67585";
				map_size = 13;
				break;
			case "kita":
				start_lng = "137.63706";
				start_lat = "34.84198";
				map_size = 12;
				break;
			case "hamakita":
				start_lng = "137.77919";
				start_lat = "34.81746";
				map_size = 13;
				break;
			case "tenryu":
				start_lng = "137.84545";
				start_lat = "35.12440";
				map_size = 10;
				break;
			case 'favorite':
				if (arguments[1] == "" || arguments[2] == "" || arguments[3] == "") {
				} else {
					if (pos == 'favorite') {
						start_lng = parseFloat(arguments[1]);
						start_lat = parseFloat(arguments[2]);
						map_size = parseInt(arguments[3]);
						break;
					}
				}
			case 'other':
				start_lng = "137.73441";
				start_lat = "34.70371";
				map_size = 11;
				break;

		}
	}

	function SearchGeocoder(addr) {
		start_lng = "137.73441";
		start_lat = "34.70371";
		map_size = 11;

		if (addr == "") {
		} else {
			showAddress(addr);
		}
	}

	function SetKeyword(val) {
		if (val == "") {
			search_keyword = "none";
		} else {
			search_keyword = val;
		}
		map.clearOverlays();
		PlotMarker(map);		
	}

	function SetCategory(val) {
		if (val == "") {
			search_category = "none";
		} else {
			search_category = val;
		}
		map.clearOverlays();
		PlotMarker(map);		
	}

	function ShowCompanyMap(c_addr, c_id) {
		var html;
		map = new GMap2(document.getElementById("show_map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());

		geocoder.getLatLng(c_addr, function(point) {
			if (!point) {
				alert(c_addr + " が見つかりませんでした。");
			} else {
				var request = GXmlHttp.create();
				url = '/exec/map_info/';
				param = 'mode=c&id='+c_id;
				request.open("POST",url,true);
				request.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
				request.send(param);
				request.onreadystatechange = function() { 
					if (request.readyState == 4) { 
						var res = request.responseXML; 
						var marker = res.documentElement.getElementsByTagName("marker"); 
						var name = marker[0].getAttribute("name");
						var tel = marker[0].getAttribute("tel");
						var address = marker[0].getAttribute("address");
						var member_flg = marker[0].getAttribute("member_flg");
						if (member_flg == '1') {
							member_img = '<img src="/images/ccimark.gif" width="27" height="18" align="absmiddle" alt="浜松商工会議所会員" />';
						} else {
							member_img = '<img src="/images/blank.gif" width="27" height="18" align="absmiddle" />';
						}
						var html = member_img+"<strong>"+name+'</strong><br>'+ address + '<br><div class="tel">' + tel +'</div><div class="link"><a href="javascript:void(0)" onclick="'+"openResult('/exec/company_info/"+marker[0].getAttribute("id")+"/'"+')">&gt;&gt;詳細情報を見る</a></div><div style="clear: both"></div>';

						map.setCenter(point, 18);
						var marker = new GMarker(point);
						map.addOverlay(marker);
						marker.openInfoWindowHtml(html);
						document.getElementById('map_infobar').style.display = "none";
					}
				}
			}
		});
	}

	function AddFavorite() {
		var request = GXmlHttp.create();
		var zoom = map.getZoom();
		var url;

		url = '/exec/map_info/';
		param = 'mode=u&lng='+point.y+"&lat="+point.x+"&zoom="+zoom;

		request.open("POST",url,true);
		request.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
		request.send(param);
		request.onreadystatechange = function() { 
			if (request.readyState == 4) { 
				var res = request.responseXML; 
				var result = res.documentElement.getElementsByTagName("result"); 
				var status = result[0].getAttribute("status");
				var msg = result[0].getAttribute("msg");
				alert(msg);
			}
		}
	}

	function openResult(url) {
		w = window.open(url, "companyresult", "width=820, scrollbars=yes, resizable=yes");
	}
