var map = null;
var baseIcon = null;
var MaxWidth = 350;
var MapData = [];
var TownData = [];
var KitenData = [];
var KitenKyori = new Array(0.5, 1, 2, 5, 30);
var KyoriLatLng = {'lat':'110.8693','lng':'94.36'};
var KyoriCircle = [];
KyoriCircle['lat'] = new Array(0.00901963,0.00898531,0.00888260,0.00871229,0.00847568,0.00817456,0.00781123,0.00738845,0.00690944,0.00637784,0.00579771,0.00517345,0.00450981,0.00381186,0.00308489,0.00233445,0.00156624,0.00078611,0,-0.00078611,-0.00156624,-0.00233445,-0.00308489,-0.00381186,-0.00450981,-0.00517345,-0.00579771,-0.00637784,-0.00690944,-0.00738845,-0.00781123,-0.00817456,-0.00847568,-0.00871229,-0.00888260,-0.00898531,-0.00901963,-0.00898531,-0.00888260,-0.00871229,-0.00847568,-0.00817456,-0.00781123,-0.00738845,-0.00690944,-0.00637784,-0.00579771,-0.00517345,-0.00450981,-0.00381186,-0.00308489,-0.00233445,-0.00156624,-0.00078611,0,0.00078611,0.00156624,0.00233445,0.00308489,0.00381186,0.00450981,0.00517345,0.00579771,0.00637784,0.00690944,0.00738845,0.00781123,0.00817456,0.00847568,0.00871229,0.00888260,0.00898531,0.00901963);
KyoriCircle['lng'] = new Array(0,0.00092365,0.00184027,0.00274289,0.00362463,0.00447879,0.00529886,0.00607860,0.00681208,0.00749371,0.00811832,0.00868114,0.00917789,0.00960479,0.00995859,0.01023660,0.01043671,0.01055738,0.01059771,0.01055738,0.01043671,0.01023660,0.00995859,0.00960479,0.00917789,0.00868114,0.00811832,0.00749371,0.00681208,0.00607860,0.00529886,0.00447879,0.00362463,0.00274289,0.00184027,0.00092365,0,-0.00092365,-0.0018027,-0.00274289,-0.00362463,-0.00447879,-0.00529886,-0.00607860,-0.00681208,-0.00749371,-0.00811832,-0.00868114,-0.00917789,-0.00960479,-0.00995859,-0.01023660,-0.01043671,-0.01055738,-0.01059771,-0.01055738,-0.01043671,-0.01023660,-0.00995859,-0.00960479,-0.00917789,-0.00868114,-0.00811832,-0.00749371,-0.00681208,-0.00607860,-0.00529886,-0.00447879,-0.00362463,-0.00274289,-0.00184027,-0.00092365,0);
var ZoomIn = 17;
var TownZoom = 12;
var Default = {"lat":"33.55991228","lng":"133.5427237","zoom":14};
var cnt;
var chn = new Array("whale","ijin","matsuri","rekishi","fuukei","hanabi","oishii","yado","surf","shisetsu","temple");
function getWindowHeight() {
	if (window.self && self.innerHeight) {
		return self.innerHeight;
	}
	if (document.documentElement && document.documentElement.clientHeight) {
		return document.documentElement.clientHeight;
	}
	return 550;
}
function resizeApp() {
	var offsetTop = 0;
	var mapElem = document.getElementById("map");
	var listElem = document.getElementById("maplist");
	var menuElem = document.getElementById("menulist");
	for (var elem = mapElem; elem; elem = elem.offsetParent) {offsetTop += elem.offsetTop;}
	var height = getWindowHeight() - offsetTop - 10;
	if (height >= 0) {
		mapElem.style.height = height + "px";
		listElem.style.height = height + "px";
		menuElem.style.height = height + "px";
	}
}
function initMap(){
	map = new GMap2(document.getElementById("map"));
	map.addMapType(G_PHYSICAL_MAP);
	map.addControl(new GOverviewMapControl());
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	map.enableContinuousZoom();
	map.enableDoubleClickZoom();
	map.enableScrollWheelZoom();
	baseIcon = new GIcon();
	baseIcon.shadow = "./img/shadow01.png";
	baseIcon.iconSize = new GSize(23, 40);
	baseIcon.shadowSize = new GSize(37, 37);
	baseIcon.iconAnchor = new GPoint(12, 45);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	
	map.setCenter(new GLatLng(Default["lat"], Default["lng"]), Default["zoom"]);
}
function createMarkers(keydata) {
	MapData = PointList();
	var i;
	var result = false;
	if(keydata!=""){
		for (i in MapData) {
			MapData[i].marker = new GMarker(new GLatLng(MapData[i].lat, MapData[i].lng), createIcon(MapData[i].category));
			if(MapData[i].tag == keydata)result = i;
		}
	}else{
		for (i in MapData) {
			MapData[i].marker = new GMarker(new GLatLng(MapData[i].lat, MapData[i].lng), createIcon(MapData[i].category));
		}
	}
	return result;
}
function createIcon(code){
	var icon = new GIcon(baseIcon);
	icon.image = "./img/" +code+".gif";
	return icon;
}
function plotAll() {
	map.clearOverlays();
	var i;
	for (i in MapData) {
		if (MapData[i].show){
			plotCommon(i);
		}
	}
}
function plotCommon(i) {
	map.addOverlay(MapData[i].marker);
	if(MapData[i].points){
		var points = [];
		for (j in MapData[i].points) {
			points.push(new GLatLng(MapData[i].points[j].lat, MapData[i].points[j].lng));
		}
		map.addOverlay(new GPolyline(points,'#ff0000',5,0.7));
	}
	GEvent.addListener(MapData[i].marker, "click", function() {
		opTab(i,2);
	});
}
function opTab(id,key) {
var opt = map.getInfoWindow();
opt.maxWidth = MaxWidth;
var gpObj = new GLatLng(MapData[id].lat,MapData[id].lng);
if(key == 0){
	map.setCenter(gpObj);
}else if(key == 2){
}else{
	map.setCenter(gpObj, ZoomIn);
}
var kihonTab = "<div style=padding:3px;><div><div style=float:left;><span class=title><img src=img/" + MapData[id].category + "2.gif>　";
kihonTab += MapData[id].title;
kihonTab += "</span></div>";
if(map.getZoom() < ZoomIn){
	kihonTab +="<div style=float:right;><a href='javascript:opTab(" + id + ",1)'><img src=img/zoom.gif border=0 align=left alt=この場所を拡大表示する>拡大<br>表示</a></div>"
}
kihonTab +="</div><div style=clear:both;><hr class=lv1><span class=head>住所</span> ";
kihonTab +=MapData[id].adr;
kihonTab +="</font><hr class=lv2>";
if(MapData[id].tel){
	kihonTab +="<span class=head>電話番号</span> " + MapData[id].tel + "<hr class=lv2>";
}
if(MapData[id].hanabi1){
	kihonTab +="<span class=head>開催日</span> " + MapData[id].hanabi1 + "</font><hr class=lv2><span class=head>打ち上げ数</span> " + MapData[id].hanabi2 + "<hr class=lv2>";
}
kihonTab +="<span class=head>コメント</span> " + MapData[id].comment + "<hr class=lv2></div></div>";

var infoTabs = [new GInfoWindowTab("基本情報", kihonTab)];
if(MapData[id].shosai){
	infoTabs.push (new GInfoWindowTab("詳細情報", MapData[id].shosai));
}
if(MapData[id].keitai){
	infoTabs.push (new GInfoWindowTab("携帯電話へ", MapData[id].keitai));
}
if(MapData[id].coupon){
	infoTabs.push (new GInfoWindowTab("クーポン", MapData[id].coupon));
}
	map.openInfoWindowTabsHtml(gpObj, infoTabs, opt);
	AccessLogSet(id);
}
function TabWindowSet(point, tabinfo, mapkey) {
 	var opt = map.getInfoWindow();
	opt.maxWidth = MaxWidth;
	var marker = new GMarker(point, icon);

	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowTabsHtml(tabinfo, opt);

		AccessLogSet(mapkey);
	});
	return marker;
}
function ListMenuSet(){
	var j;
	var Newdat = false;
	var str = "";
	
	if(!cnt){
		str = "<ul>\n";
		str += "<li>指定した条件に該当するデータはありません\n";
		str += "</ul>\n";
		document.getElementById("kensu").innerHTML = "";
		document.getElementById("listtext").innerHTML = str;
		return false;
	}

	for (i in MapData) {
		if (MapData[i].newdata){
			Newdat = true;
			break;
		}
	}
	if(Newdat){
		str += "<div class=\"head\" align=\"center\">新着情報</div>\n";
		str += "<ul>\n";
		for (i in MapData) {
			if (MapData[i].newdata && MapData[i].show){
				str += ListMenuSetCommon(i)
			}
		}
		str += "</ul>\n";
		str += "<hr class=\"lv3\">";
	}
	str += "<ul>\n";
	for (i in MapData) {
		if (!MapData[i].newdata && MapData[i].show){
			str += ListMenuSetCommon(i)
		}
	}
	str += "</ul>\n";
	document.getElementById("kensu").innerHTML = "(<strong>"+cnt+"</strong>件該当しました)";
	document.getElementById("listtext").innerHTML = str;
}
function ListMenuSetCommon(i){
	var str = "";
	str += "<li class=\"" + MapData[i].category + "\">";
	str += "<a href=\"javascript:opTab(" + i + ",0)\">";
	str += MapData[i].name;
	str += "</a></li>";
	return str;
}
function Coupon_Disp(mapkey) {
	if(mapkey != null){
		page = 'coupon_print.php?key=' + mapkey;
		window.open(page, 'WindowOpen1', 'toolbar=no, location=no, directories=no, width=530, height=450');
	}
}
function AccessLogSet(mapkey) {
	var str2 = "&amp;img=1&amp;scr=" + screen.width + "x" + screen.height + "x" + screen.colorDepth + "&amp;ref=" + escape(parent.document.referrer) + "' border=0 width=1 height=1>";
	if(mapkey == null){
		document.getElementById("access1").innerHTML = "<img src='http://www.rigulife.com/webkochi/cgi-bin/access/accimg.cgi?id=map_index" + str2;
	}else{
		document.getElementById("access2").innerHTML = "<img src='http://www.rigulife.com/webkochi/cgi-bin/map/access/accimg.cgi?id=" + MapData[mapkey].tag + str2;
	}
}
function ListBoxSet(){
	var i;
	var str;
	KitenData = KitenList();
	str="<select name='shuhen'>\n";
	for (i in KitenData) {
		if(i==0){
			str+="<option value='0' selected>指定なし</option>\n";
		}else{
			str+="<option value='" + i + "'>" + KitenData[i].name + "</option>\n"
		}
	}
	str+="</select>\n周辺"
	document.getElementById("kiten").innerHTML = str;
	
	TownData = TownList();
	str="<select name='town'>\n";
	for (i in TownData) {
		if(i==0){
			str+="<option value='0' selected>高知県全域</option>\n";
		}else{
			str+="<option value='" + i + "'>" + TownData[i].name + "</option>\n"
		}
	}
	str+="</select>\n"
	document.getElementById("town").innerHTML = str;
}
function MapHyojiSelect(){
	var chk = false;
	for(i in chn) {
		if(document.nForm.elements[chn[i]].checked){
			chk = true;
		}
	}
	if(!chk){
		window.alert("カテゴリーは、最低１つは選択してください。");
		return false;
	}
	var date1=document.nForm.elements['date1'].value;
	var date2=document.nForm.elements['date2'].value;
	if((date1==0 && date2!=0)||(date2!=0 && (date1 > date2))){
		window.alert("期間を正しく選択してください。");
		return false;
	}
	if(date1!=0 && date2==0){
		date2=date1;
	}
	
	var FreeS = false;
	if(document.nForm.elements['skey'].value.length){
		var tmp = escapeHTML(document.nForm.elements['skey'].value).split(/[\s,　]+/);
		var SKey = [];
		for (j in tmp){
			SKey[j] = new RegExp(tmp[j]);
		}
		FreeS = true;
	}
	var KitenS = false;
	if(document.nForm.elements['shuhen'].value != 0){
		var KArray = KitenData[document.nForm.elements['shuhen'].value];
		KitenS = true;
		KArray.area = document.nForm.elements['hankei'].value;
		map.setCenter(new GLatLng(KArray.lat, KArray.lng), KArray.zoom[KArray.area]);
	}
	var TownS = false;
	if(document.nForm.elements['town'].value != 0){
		if(KitenS){
			window.alert("検索ポイントを指定している場合は、\n市町村の指定は無視します。");
			document.nForm.elements['town'].value = 0;
		}else{
			var TArray = TownData[document.nForm.elements['town'].value];
			var TKey = new RegExp(TArray.name);
			TownS = true;
			map.setCenter(new GLatLng(TArray.lat, TArray.lng), TownZoom);
		}
	}
	cnt = 0;
	for (i in MapData) {
		MapData[i].show = false;
		CheckLoop:{
			if (document.nForm.elements[MapData[i].category].checked == false){
				break CheckLoop;
			}
			if(FreeS){
				SText = MapData[i].name + MapData[i].kana + MapData[i].adr + MapData[i].comment;
				for (j in SKey){
					if(SKey[j]!=null && !SText.match(SKey[j])) {
						break CheckLoop;
					}
				}
			}
			if(date1!=0 && MapData[i].date1){
				if(MapData[i].date1<date1 || MapData[i].date2>date2){
					break CheckLoop;
				}
			}
			if(KitenS){
				if(!KyoriCheck(KArray.lat, KArray.lng, KArray.area, MapData[i].lat, MapData[i].lng)) {
					break CheckLoop;
				}
			}
			if(TownS){
				SText = MapData[i].adr;
				if(!SText.match(TKey)) {
					break CheckLoop;
				}
			}
			MapData[i].show = true;
			cnt++;
		}
	}
	plotAll();
	ListMenuSet();
	if(KitenS)KCircle(KArray.lat, KArray.lng, KitenKyori[KArray.area]);
	return cnt;
}
function KyoriCheck(lat0, lng0, area0, lat1, lng1){
	var lat_dif = (lat1 - lat0) * KyoriLatLng.lat;
	var lng_dif = (lng1 - lng0) * KyoriLatLng.lng;
	var distance = Math.sqrt(lat_dif*lat_dif + lng_dif*lng_dif);
	
	if(distance <= KitenKyori[area0]){
		return true;
	}else{
		return false;
	}
}
function KCircle(lat0, lng0, kyori){
	var points = [];
	lat1 = parseFloat(lat0);
	lng1 = parseFloat(lng0);
	for (i in KyoriCircle.lat){
		lat2 = lat1 + parseFloat(KyoriCircle.lat[i])*kyori;
		lng2 = lng1 + parseFloat(KyoriCircle.lng[i])*kyori;
		points.push(new GLatLng(lat2, lng2));
	}
	map.addOverlay(new GPolygon(points, "#0000ff", 2, 0.5, "#00ffff", 0.1));
}
function MapHyojiAll(){
	cnt = 0;
	for (i in MapData) {
		MapData[i].show = true;
		cnt++;
	}
	plotAll();
	ListMenuSet();
	
	return cnt;
}
function escapeHTML(str) {
  return str.replace(/&/g, "\\\&").replace(/"/g, "\\\"").replace(/'/g, "\\\'").replace(/\//g, "\\\/").replace(/</g, "＜").replace(/>/g, "＞").replace(/0x0D/ig, "r").replace(/0x0A/ig, "n");
}
function asort(key,des){
	if (sort_key!=key || sort_des!=des){
		document.getElementById("sort_" + sort_key + sort_des).style.fontWeight ="normal";
		if (des){
			MapData.sort ( function (b1, b2) { return b1[key] > b2[key] ? 1 : -1; } );
		}else{
			MapData.sort ( function (b1, b2) { return b1[key] < b2[key] ? 1 : -1; } );
		}
		sort_key=key;
		sort_des=des;
		document.getElementById("sort_" + sort_key + sort_des).style.fontWeight ="bold";
		plotAll();
		ListMenuSet();
	}
}
function chBxOn(){
	for(var i in chn) {
		document.nForm.elements[chn[i]].checked = true;
	}
}
function chBxOff(){
	for(var i in chn) {
		document.nForm.elements[chn[i]].checked = false;
	}
}
