//<![CDATA[

// 以下ページを参考に改造
// http://perltips.twinkle.cc/ajax/movable_type_google_maps.php

var BASE_URL = "http://roji-kamakura.net/2010/";

// 出力ファイル
var GMAP_FILE = "gmap2010.xml";

// アイコン記事が空のときのデフォルトアイコンをセット
var ICON_DEFAULT = "img/gmap/marker.png";
var ICON_SHADOW = "img/gmap/map-icon-shadow.png";

var map;
var baseicon;
var xmlHttp;

function init() {

	// console.info("gmap2010: 20100326a");

	map = new GMap2(document.getElementById("map"));
	baseicon = new GIcon();  // アイコン
	xmlHttp  = GXmlHttp.create(); // XmlHttpRequest

	// 地図の中心点と縮尺を指定(縮尺は数字が大きいほど拡大図に)
	if(location.href.indexOf('/info/') != -1){
		map.setCenter(new GLatLng(35.323704,139.558318), 16);
	}else{
		map.setCenter(new GLatLng(35.324177,139.558275), 15); 
	}

	// 地図を設定
	map.addControl(new GSmallMapControl());
	map.enableDoubleClickZoom();
	map.enableScrollWheelZoom();

	// アイコンを設定
	baseicon.image            = BASE_URL + ICON_DEFAULT;
	baseicon.shadow           = BASE_URL + ICON_SHADOW;
	baseicon.iconSize         = new GSize (32, 32);
	baseicon.shadowSize       = new GSize (59, 32);
	baseicon.iconAnchor       = new GPoint(16, 32);

	// アイコンの座標に対する画像左上からの相対位置
	baseicon.infoWindowAnchor = new GPoint( baseicon.iconSize.width /2, baseicon.iconSize.height /2 );
   
	// マーカーを設定: XML データを読み込んで表示
	xmlHttp.open("GET", BASE_URL + GMAP_FILE,  true);
	xmlHttp.onreadystatechange = showMarkers;
	xmlHttp.send(null);
}

function showMarkers() {

	var strTmp = '';

	if (xmlHttp.readyState == 4) {
		var xmlDoc = xmlHttp.responseXML;
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		
		// iconリンクをベースに各拠点ごとに行われるイベント数を数える
		var objUniqs = {};
		for (var i = 0; i < markers.length; i++) {
			if(!objUniqs[markers[i].getAttribute("icon")]){
				objUniqs[markers[i].getAttribute("icon")] = new Array();
			}
			objUniqs[markers[i].getAttribute("icon")].push(markers[i]);
		} // End of for
		
		for (var i in objUniqs){
			addMarker(objUniqs[i]);
		}
	}
}

// 日本測地系から変換
function GLatLng_tky(la,ln){
        var lat = la - la * 0.00010695  + ln * 0.000017464 + 0.0046017;
        var lng = ln - la * 0.000046038 - ln * 0.000083043 + 0.010040;
        return new GLatLng(lat,lng);
}

// マーカとそれが持つ吹き出しの追加
function addMarker(xmls) {
	// アイコンが重複していたら最初に得られたほうの位置情報でマーカを1個配置
	if(xmls[0].getAttribute("icon")){
		baseicon.image = BASE_URL + xmls[0].getAttribute("icon");
	}else{
		baseicon.image = BASE_URL + ICON_DEFAULT;
	}
	var icon   = new GIcon(baseicon);
	var point  = new GLatLng(xmls[0].getAttribute("lat"),xmls[0].getAttribute("lng"));
	var marker = new GMarker(point, icon);
	map.addOverlay(marker);
	
	// console.info("gmap2010: xmls.count = "+xmls.length);

	var html = '<div id="InfoWindow"';
	if(xmls.length == 1){
		html += '>';
	} else {
		html += ' class="double">';
	}
	for(var i = 0;i<xmls.length;i++){
		html += '<h4>'
		+ xmls[i].getAttribute("name")
		+ '</h4><h3><a href="'
		+ xmls[i].getAttribute("link") 
		+ '">'
		+ xmls[i].getAttribute("eventtitle") 
		+ '</a></h3><p>［'
		+xmls[i].getAttribute("categories")
		+'］</p>';
	}
	// console.info("gmap2010: "+xmls[0].getAttribute("link") + " " + html);
	// html += '<!-- '+ xmls.length+' '+xmls[0].getAttribute("icon") + " " + html;
	// html += '-->';
	html += '</div>';

	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	}); 

	// 詳細ページから戻ってきたときはフキダシを開いておきたい
	for(var i = 0;i<xmls.length;i++){
		if(xmls[i].getAttribute("link") == document.referrer){
		//alert(document.referrer);
			// 地図アンカーへ戻ったときのみ開くように変更
			// マップ戻しの"?"対応をしたので"#map"を変更
			if(location.href.indexOf('?map') != -1){
				GEvent.trigger(marker,'click'); 
			}
		}
	}
}
//]]>

