var map = panorama = latlag = adunit = marker_ary_place = info_old = place_id = popup = trbg = null;
var info_ary = new Array(), marker_ary = new Array();
var num_m = 0;
var place_ary = ["病院", "銀行", "郵便局", "コンビニ", "スーパー", "小学校", "幼稚園", "給油所"];
var az_ary = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Small80"];

/************************************************************
Map: Load Item
*************************************************************/
function aLoad() {
	$("mapbar").innerHTML = "";
	$("map").style.display = "block";
	$("samap").style.display = "none";
	marker_ary = new google.maps.MVCArray();
	marker_ary_place = new google.maps.MVCArray();
	var address = ($("g").value) ? $("g").value : $("address").value;
	aMapGetGeo(address, "item", 14);
}
/************************************************************
Map: Load Area
*************************************************************/
function aLoadArea(zoom) {
	var zoom = (zoom) ? zoom : 5;
	for(var i=0; i<20; i++) {
		if($("m" + i)) {
			aMapGetGeo($("m" + i).value, i, zoom);
		}
	}
}
/************************************************************
Map: change Info Window
*************************************************************/
function aMapChangeInfoWindow(info, marker, i) {
	info.open(marker.getMap(), marker);
	if(info_old) {
		info_old.close();
	}
	info_old = info;
	if(trbg!=null) {
		$("tr" + trbg).style.background = "#fafafa";
	}
	$("tr" + i).style.background = "pink";
	trbg = i;
}
/************************************************************
Map: create Info Window
*************************************************************/
function aMapCreateInfoWindow(marker, msg, i) {
	google.maps.event.addListener(marker, "click", function() {
		var info = new google.maps.InfoWindow({
			content: msg
		});
		aMapChangeInfoWindow(info, marker, i);
	});
}
/************************************************************
Map: create marker
*************************************************************/
function aMapCreateMarker(lat, lng, i, tit) {
	var marker = new google.maps.Marker({
		position: new google.maps.LatLng(lat, lng),
		title: tit,
		icon: new google.maps.MarkerImage(
			"http://www.google.com/mapfiles/gadget/letters/marker" + az_ary[i] + ".png",
			new google.maps.Size(16, 27)
		),
		map: map
	});
	return marker;
}
/************************************************************
Map: create marker local place
*************************************************************/
function aMapCreateMarkerLocal(lat, lng, tit) {
	var marker = new google.maps.Marker({
		position: new google.maps.LatLng(lat, lng),
		title: tit,
		icon: new google.maps.MarkerImage(
			"./img/g" + (place_id+1) + ".png"
		),
		map: map
	});
	return marker;
}
/************************************************************
Map: draw
*************************************************************/
function aMapDraw(newlatlng, id) {
	if(panorama) {
		panorama = null;
	}
	panorama = new google.maps.StreetViewPanorama($("street"), {
		position: newlatlng,
		pov: {
			heading: 0,
			pitch: 0,
			zoom: 0
		}
	});

	var adUnitDiv = document.createElement('div');
//		format: google.maps.adsense.AdFormat.HALF_BANNER,
	var adUnitOptions = {
		format: google.maps.adsense.AdFormat.SMALL_RECTANGLE,
		position: google.maps.ControlPosition.RIGHT_BOTTOM,
		publisherId: 'ca-pub-9597452072997565',
		channelNumber: '1195151892',
		map: map,
		visible: true
	};
	adUnit = new google.maps.adsense.AdUnit(adUnitDiv, adUnitOptions);

	map.setStreetView(panorama);
	if(!id) {
		aMapLoadFile("lat=" + newlatlng.lat() + "&lng=" + newlatlng.lng() + "&km=10");
	}
	latlng = newlatlng;
	google.maps.event.addListener(map, "dblclick", function(event) {
		map.setCenter(event.latLng);
		aMapDraw(event.latLng, 1);
		aMapPanorama();
	});
	google.maps.event.addListener(map, "tilesloaded", function(event) {
		aMapPanorama();
	});
	google.maps.event.addListener(panorama, "position_changed", function(event) {
		map.panTo(panorama.getPosition());
		aMapPanorama();
	});
}
/************************************************************
Map: load tika data
*************************************************************/
function aMapGetGeo(adr, i, zoom) {
	furl = "./xml/?id=geo31&adr=" + encodeURIComponent(adr);
	var hObj = createXMLHttpRequest();
	if(hObj) {
		hObj.open("GET", furl, true);
		hObj.onreadystatechange = function() { 
			if(hObj.readyState==4) {
				var t = hObj.responseText;
				if(!t) {
					return;
				}
				var data = eval("(" + t + ")");
				if(data.item[0].lat!=null) {
					num_m++;
					if(num_m==1) {
						var lat = (zoom==5) ? 38.19858 : data.item[0].lat;
						var lng = (zoom==5) ? 137.966111 : data.item[0].lng;
						map = new google.maps.Map($("map"), {
							zoom: zoom, 
							center: new google.maps.LatLng(lat, lng), 
							mapTypeId: google.maps.MapTypeId.ROADMAP,
							scaleControl: true,
							scrollwheel: false,
							scaleControlOptions: {
								position: google.maps.ControlPosition.BOTTOM_LEFT
							}
						});
					}
					if(i=="item") {
						latlag = new google.maps.LatLng(data.item[0].lat, data.item[0].lng),
						aMapDraw(latlag);
					}else {
						adr_ = $("ma" + i).title;
						marker_ary[i] = aMapCreateMarker(data.item[0].lat, data.item[0].lng, i, adr_);
						var infopt = {
							content : "<a href=\"./item/" + $("mid" + i).value + "/\">" + adr_ + "</a><br /><strong>" + $("mval" + i).innerHTML + "</strong> (" + $("mm2" + i).innerHTML + ")"
						};
						info_ary[i] = new google.maps.InfoWindow(infopt);
						$("icon" + i).innerHTML = "<a href=\"javascript:void(0);\" onclick=\"aMapGetGeoPopInfowidow(" + i + ")\" title=\"地図で場所を確認する\"><img src=\"http://www.google.com/mapfiles/gadget/letters/marker" + az_ary[i] + ".png\" alt=\"" + az_ary[i] + "\" style=\"clip:rect(0 20px 17px 0); position:absolute;\" /></a>";
						google.maps.event.addListener(marker_ary[i], "click", function() {
							aMapGetGeoPopInfowidow(i);
						});
					}
				}else if(i=="item") {
					$("map").style.display = "none";
					$("street").style.display = "none";
					$("samap").style.display = "block";
					$("samap").innerHTML = "<h3>※この所在地の地図は見つかりませんでした。</h3>";
				}
			}
		}
		hObj.send(null);
	}
}
/************************************************************
Map: create tika Info Window
*************************************************************/
function aMapGetGeoPopInfowidow(i) {
	if(popup) {
		popup.close();
	}
	popup = info_ary[i];
	info_ary[i].open(map, marker_ary[i]);
	if(trbg!=null) {
		$("tr" + trbg).style.background = "#fafafa";
	}
	$("tr" + i).style.background = "pink";
	trbg = i;
}
/************************************************************
Map: hide marker
*************************************************************/
function aMapHideMarker(id) {
	marker_ary.forEach(function(marker) {
		if($("barCheckbox").checked==false || id==1) {
			marker.setMap(null);
			$("barCheckbox").checked = false;
		}else {
			marker.setMap(map);
		}
	});
}
/************************************************************
Map: hide marker local place
*************************************************************/
function aMapHideMarkerPlace() {
	marker_ary_place.forEach(function(marker) {
		marker.setMap(null);
	});
	for(var i=0; i<place_ary.length; i++) {
		$("local_" + i).style.background = "#fffffe";
		$("local_" + i).style.fontWeight = "normal";
	}
}
/************************************************************
Map: echo tika data
*************************************************************/
function aMapJsonEcho(data) {
	var com, tit;
	var tmp = new Array(), tmp2 = new Array();
	var cmarker = new google.maps.Marker({
		position: map.getCenter(),
		map: map
	});
	var msg = "<strong>【競売物件】</strong> " + $("address").innerHTML;
	new google.maps.InfoWindow({
		content: msg
	});
	aMapCreateInfoWindow(cmarker, msg);
	tmp.push("<tr class=\"by\">");
	tmp.push("<td style=\"vertical-align:top;\"><img src=\"http://www.google.com/mapfiles/gadget/markerSmall80.png\" alt=\"物件\" style=\"clip:rect(0 20px 17px 0); position:absolute;\" /></td>");
	tmp.push("<td>*競売物件</td>");
	tmp.push("<td class=\"r\">" + chVal($("m2_per").value/0.3025) + "円</td>");
	tmp.push("<td class=\"r\">-　</td>");
	tmp.push("<td> </td>");
	tmp.push("<td> </td>");
	tmp.push("</tr>");
	for(var i=0; i<data.item.length; i++) {
		com = data.item[i].a7;
		if(i<20) {
			tmp.push("<tr id=\"tr" + i + "\">");
			tmp.push("<td style=\"vertical-align:top;\"><img src=\"http://www.google.com/mapfiles/gadget/letters/marker" + az_ary[i] + ".png\" alt=\"" + az_ary[i] + "\" style=\"clip:rect(0 20px 17px 0); position:absolute;\" /></td>");
			tmp.push("<td>" + data.item[i].a3 + "</td>");
			tmp.push("<td class=\"r\">" + chVal(data.item[i].a6/0.3025) + "円</td>");
			tmp.push("<td class=\"r\">" + data.item[i].a8 + "m</td>");
			tmp.push("<td class=\"r\">" + data.item[i].a4 + "%</td>");
			tmp.push("<td class=\"r\">" + data.item[i].a5 + "%</td>");
			tmp.push("</tr>");
		}
		tit = chVal(data.item[i].a6/0.3025) + "円/坪 (直線距離" + data.item[i].a8 + "m)";
		lat = data.item[i].a1/1000000;
		lng = data.item[i].a2/1000000;
		msg = "<strong>地価: " + chVal(data.item[i].a6/0.3025) + "円/坪</strong><br />" + data.item[i].a3;
		var marker = aMapCreateMarker(lat, lng, i, tit);
		aMapCreateInfoWindow(marker, msg, i);
		marker_ary.push(marker);
	}
	for(var i=0; i<place_ary.length; i++) {
		tmp2.push("<a href=\"javascript:void(0);\" onclick=\"aMapLoadLocal('lat=" + latlag.lat() + "&lng=" + latlag.lng() + "&key=" + i + "', " + i + ");\" id=\"local_" + i + "\" title=\"競売物件付近の" + place_ary[i] + "を確認する\"><img src=\"./img/g" + (i+1) + ".png\" alt=\"@\" class=\"icon\" />" + place_ary[i] + "</a>");
	}
	$("mapbar").innerHTML = "<strong>【地域情報】</strong><a href=\"javascript:void(0);\" onclick=\"aMapHideMarker(1); aMapHideMarkerPlace();\">クリア</a> (*<a href=\"http://developer.yahoo.co.jp/about\" class=\"out\" target=\"_blank\">Webサービス by Yahoo! JAPAN</a>)<p class=\"s1\">" + tmp2.join(" ") + "</p><br />";
	$("smap").innerHTML = "<strong>【公示地価】</strong><span id=\"maptika\"><label for=\"barCheckbox\" title=\"地図上に付近の地価を表示非表示する\"><input type=\"checkbox\" id=\"barCheckbox\" onclick=\"aMapHideMarker();\" checked=\"checked\" />地価の表示非表示</label> </span><table><tr><th>NO</th><th>所在地</th><th>坪単価</th><th>距離</th><th>建蔽率</th><th>容積率</th></tr>\n" + tmp.join("\n") + "</table><span class=\"s1\">*<a href=\"http://nlftp.mlit.go.jp/ksj/\" class=\"out\" target=\"_blank\">" + com + "国土数値情報(地価公示データ・都道府県地価調査データ)</a></span>";
}
/************************************************************
Map: echo local place
*************************************************************/
function aMapJsonEchoLocal(data) {
	var len = data.item.length;
	var len = (len<30) ? len : 30;
	for(var i=0; i<len; i++) {
		name = data.item[i].name;
		lat = data.item[i].lat;
		lng = data.item[i].lng;
		var marker = aMapCreateMarkerLocal(lat, lng, name);
		aMapCreateInfoWindow(marker, name, i);
		marker_ary_place.push(marker);
	}
	return;
}
/************************************************************
Map: load tika data file
*************************************************************/
function aMapLoadFile(furl) {
	furl = "./xml/?id=gea5&" + furl;
	var hObj = createXMLHttpRequest();
	if(hObj) {
		hObj.open("GET", furl, true);
		hObj.onreadystatechange = function() { 
			if(hObj.readyState==4) {
				var t = hObj.responseText;
				if(!t) {
					return;
				}
				var data = eval("(" + t + ")");
				return aMapJsonEcho(data);
			}
		}
		hObj.send(null);
	}
}
/************************************************************
Map: load local place
*************************************************************/
function aMapLoadLocal(furl, id) {
	place_id = id;
	aMapHideMarkerPlace();
	furl = "./xml/?id=gxa4&" + furl;
	var hObj = createXMLHttpRequest();
	if(hObj) {
		hObj.open("GET", furl, true);
		hObj.onreadystatechange = function() { 
			if(hObj.readyState==4) {
				var t = hObj.responseText;
				if(!t) {
					return;
				}
				var data = eval("(" + t + ")");
				$("local_" + place_id).style.background = "yellow";
				$("local_" + place_id).style.fontWeight = "bold";
				return aMapJsonEchoLocal(data);
			}
		}
		hObj.send(null);
	}
}
/************************************************************
Map: Panorama
*************************************************************/
function aMapPanorama() {
	$("street").style.display = (panorama.getPano()!==void 0) ? "block" : "none";
}

/************************************************************
Bit logins
*************************************************************/
var logins = function() {
	var timeout;
	var urls
	return {
		start:function(url) {
			urls = url
			window.open("http://bit.sikkou.jp/", "newindows");
			timeout = setTimeout("logins.show()", 500);
		},
		show:function() {
			clearTimeout(timeout);
			window.open(urls, "newindows");
		}
	};
}();
/************************************************************
change val
*************************************************************/
function chVal(val) {
	val = Math.round(val);
	var len = String(val).length;
	val = (len<4) ? val : ((len>6) ? Math.round(val/10000) : Math.round(val/1000) / 10);
	var x = (len>3) ? "万" : "";
	return val + x;
}
/************************************************************
clear form
*************************************************************/
function clearForm(num) {
	$("fm").value = "";
	for(var i=0; i<num; i++) {
		$("ar[" + i + "]").checked = false;
	}
	for(var i=1; i<=4; i++) {
		$("cat[" + i + "]").checked = false;
	}
}
/************************************************************
cookie & fav
*************************************************************/
var fkey = "bit_fav_data";
function cookieGet(key) {
	var key = fkey + "=", val = "";
	var str = document.cookie + ";";
	var ofst = str.indexOf(key);
	if(ofst != -1) {
		var start = ofst + key.length;
		var end = str.indexOf(";" , start);
		val = unescape(str.substring(start, end));
	}
	return val;
}
function cookieSet(key, val) {
	var nd = new Date();
	nd.setTime(nd.getTime()+1000*60*60*24*30);
	var text = key + "=" + escape(val) + ";";
	text += "expires=" + nd.toGMTString() + "; path=/;";
	document.cookie = text;
	return nd;
}
function favClear(keys) {
	cookieSet(keys, "");
	$("clear_" + keys).innerHTML = "<div class=\"pop\">*削除しました。　[<a href=\"" + location.href + "\">確認</a>]</div>";
}
function favSet(val, id) {
	var c = cookieGet(fkey).replace("--", "-").split("-");
	c = uniq(c);
	var len = (c.length>10) ? 10 : c.length;
	var vals = val;
	for(var i=0; i<len; i++) {
		vals += "-" + c[i];
	}
	cookieSet(fkey, vals);
	var ids = (!id) ? ["x" + val, ""] : ["itemfav", id];
	$(ids[0]).innerHTML = "<div class=\"pop" + ids[1] + "\">*お気に入り物件に追加しました。</div>";
}
/************************************************************
open & hide
*************************************************************/
function openhide(id) {
	var a = $(id).style;
	a.display = (a.display=="none") ? "block" : "none";
	return a.display;
}
/************************************************************
tr blur or focus
*************************************************************/
var oldCellColor;
function Rowblur(row) {
	var cells = row.cells;
	if(!cells) return;
	for(var i=0; i<cells.length; i++) {
		cells[i].style.background = oldCellColor;
	}
}
function Rowfocus(row) {
	var cells = row.cells;
	if(!cells) return;
	oldCellColor = cells[0].style.background;
	for(var i=0; i<cells.length; i++) {
		cells[i].style.background = "pink";
	}
}
/************************************************************
 http://d.hatena.ne.jp/javascripter/20080730/1217413682
*************************************************************/
function uniq(arr) {
	var o = {}, r = [];
	for(var i= 0; i<arr.length; i++) {
		if(arr[i] in o ? false : o[arr[i]] = true) {
			r.push(arr[i]);
		}
	}
	return r;
}
/************************************************************
 http://allabout.co.jp/internet/javascript/closeup/CU20050515A/
*************************************************************/
function createXMLHttpRequest(){
	if(window.ActiveXObject){
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			}catch (e2) {
				return null;
			}
		}
	}else if(window.XMLHttpRequest) {
		return new XMLHttpRequest();
	}else {
		return null;
	}
}
function $(tagId) {
	return document.getElementById(tagId);
}

