//-----------------------------------------------------------------------------------------
//  Google Maps API
//  copyright(C) 2009 Google
//
//  on 2009/03/16 by daikichi
//  Timeline MapをKohana対応に書き直しました(書き込み無し)
//  KsGMapを取り除きました
//-----------------------------------------------------------------------------------------
var dbMarkers = null;
var dbItems = null;
var map = null;

function determineInfoWindow(index)
{
	dbItems.markers[index].openInfoWindowHtml(
		'<h3>' + dbItems.events[index].title + '</h3>'
		 + '<p><a href="/picture/detail/' + dbItems.events[index].id + '/">'
		 + '<img src="/image/view/'  + dbItems.events[index].id + '/100/100/" width="100" height="100" />'
		 + '</a></p>'
		 + '<p>' + dbItems.events[index].description + '</p>'
		 + '<br clear="both;">',
		 {
			maxWidth: 400
		 }
	);
	window.tl.getBand(1).scrollToCenter(new Date(dbItems.events[index].start));
}

function determineInfoWindowById(id)
{
	for (var i = 0; i < dbItems.events.length; i++)
	{
		if (dbItems.events[i].id == id)
		{
			determineInfoWindow(i);
			break;
		}
	}
}

function naviItem_add(index)
{
	$("#itemNavi").append('<div id="itemList--' + index + '" onclick="determineInfoWindow(' + index + ')" style="overflow-x: hidden;">' + dbItems.events[index].title + '</div>');
}

function naviItem_clear()
{
	document.getElementById("itemNavi").innerHTML = "";
}

function Map_addMarkers()
{
	naviItem_clear();

	for (var i = 0; i < dbItems.events.length; i++) {
		dbItems.markers[i] = new GMarker(new GLatLng(parseFloat(dbItems.events[i].lat), parseFloat(dbItems.events[i].lng)), {title: dbItems.events[i].id, start: dbItems.events[i].start});
		GEvent.addListener(
			dbItems.markers[i],
			"click",
			GEvent.callbackArgs(	// 変数スコープの問題を解決するためにcallbackArgsを使う
				dbItems,
				function(owner, target) { determineInfoWindow(target); },
				dbItems,
				i
			)
		);
		map.addOverlay(dbItems.markers[i]);
		naviItem_add(i);
		dbItems.markers.push();
	}
}

//XMLHttpRequestオブジェクト生成
function createHttpRequest(){
  //Win ie用
  if(window.ActiveXObject){
      try {
          //MSXML2以降用
          return new ActiveXObject("Msxml2.XMLHTTP") //[1]'
      } catch (e) {
          try {
              //旧MSXML用
              return new ActiveXObject("Microsoft.XMLHTTP") //[1]'
          } catch (e2) {
              return null
          }
       }
  } else if(window.XMLHttpRequest){
      //Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用
      return new XMLHttpRequest() //[1]'
  } else {
      return null
  }
}


function initMap(id)
{
	var map_target = "map";
	
	if ( GBrowserIsCompatible() )
	{
		map = new GMap2(document.getElementById(map_target));
		map.setCenter(new GLatLng(35.454517610505185,139.6355438232422), 14);
/*			
		// マップのリスナーを登録
		GEvent.addListener(map, "zoomend", onShiftZoom);
		*/

		// 画面機能を追加
		map.addControl(new ExtLargeMapControl());
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		
/*		var gicon = new GIcon();
		gicon.image = "http://www.ksgmap.jp/download/marker/standard04.png";
		gicon.size = new GSize(20, 34);
		gicon.shadow = "http://www.ksgmap.jp/download/marker/standard_shadow.png";
		gicon.shadowSize = new GSize(37, 34);
		gicon.iconAnchor = new GLatLng(34 / 2, 20 / 2);
		gicon.infoWindowAnchor = new GLatLng(0, 20 / 2);*/

		var xmlHttp = createHttpRequest();
		xmlHttp.onreadystatechange = function(){
			if (xmlHttp.readyState == 4)
			{
				var resText = xmlHttp.responseText
				dbItems = eval( '(' + resText + ')' );
				
				dbItems.markers = [];

				Map_addMarkers();
				
				if (!!id) {
					determineInfoWindowById(id);
				}
			}
		}
		xmlHttp.open("GET", "/map/db?" + new Date().getTime(), true);
		xmlHttp.setRequestHeader("Content-type", "application/json");
		xmlHttp.send(null);

	}
//	// [DEBUG]
//	document.title = navigator.userAgent;
	
	// イベントリスナーを登録しただけでは実行されない
//	onSiteResize();
//	onShiftZoom(3, 3);
}
//-----------------------------------------------------------------------------------------
// end of KsGMap
//-----------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------
// Timeline API
// MIT Simile project	http://simile.mit.edu/timeline/api/
// copyright(c) 2003-2008 MASSACHUSETTS INSTITUTE OF TECHNOLOGY
//-----------------------------------------------------------------------------------------

var eventSource = null;
var events = [];
var tl = null;

// <body>のonload時に実行されるタイムラインを初期化する関数
function initTL(id) {
//	seltab(4, 1);
	// 初期化処理をTimeline APIに取られてしまったので、KsGMapの初期化処理を手動で呼び出す
	initMap(id);
	eventSource = new Timeline.DefaultEventSource(0);
	var now = new Date().toGMTString();
	var bandInfos = [
		Timeline.createBandInfo({
			showEventText:  false, 
/*			trackHeight:    0.5, 
			trackGap:       0.2,*/ 
			eventSource:    eventSource, 
			date:           now, 
			width:          "0%", 
			intervalUnit:   Timeline.DateTime.YEAR, 
			intervalPixels: 1600
	}),
		Timeline.createBandInfo({
			//showEventText: false,
			eventSource:    eventSource, 
			date:           now, 
			width:          "100%", 
			intervalUnit:   Timeline.DateTime.YEAR, 
			intervalPixels: 200
		})
	];
	// intervalPixels:
	// 縦線に対する横幅の間隔を示すピクセル数
	// Timelineの横幅に対して bandInfos[1] / bandinfos[0] %の割合でハイライトを表示
	bandInfos[1].syncWith = 0;
	bandInfos[1].highlight = true;
	
	Timeline.OriginalEventPainter.prototype._showBubble =  function(x, y, evt) {
		for (var i = 0; i < dbItems.markers.length; i++)
		{
			if (dbItems.markers[i].getTitle() == evt.getID()) {
				determineInfoWindow(i);
			}
		}
	}
	tl = Timeline.create(document.getElementById("timeline"), bandInfos);
    events = [];
    eventSource.clear();
	Timeline.loadJSON("/map/db?" + new Date().getTime(), function(json, url) { eventSource.loadJSON(json, url);});
}
//-----------------------------------------------------------------------------------------
// end of Timeline API
//-----------------------------------------------------------------------------------------

// bpref = tab body prefix, hpref = tab header prefix
function seltab(id_max, selected) {
  if (! document.getElementById) return;
  for (i = 1; i <= id_max; i++) {
    if (! document.getElementById('page' + i)) continue;
    if (i == selected) {
      document.getElementById('page' + i).style.display = "inline";
      document.getElementById('page' + i).style.position = "";
      document.getElementById('menu' + i).className = "open";
    } else {
      document.getElementById('page' + i).style.display = "none";
      document.getElementById('page' + i).style.position = "absolute";
      document.getElementById('menu' + i).className = "close";
    }
  }
}

function setPopupData( eventchild, data_id, data_name, data_artist, data_img, data_desc, data_start, data_lat, data_lng ){
	if(data_id != ""){
		KsGMapMap_infoWindow_moveCenter(eventchild);
	}
	KsGMapMap.gmap.closeInfoWindow();
	KsGMapFunc.html.popupOpen(eventchild, 'add', 'display: block;');
	seltab(4,1);
	document.getElementById('ksgmap--common-popupClose-add').style.top = '41px';
//	document.getElementById('id').style.background = '#ffffff';
	document.getElementById('id').value = data_id;
	document.getElementById('name').value = data_name;
	document.getElementById('artist').value = data_artist;
	document.getElementById('img').value = data_img;
	document.getElementById('desc').value = data_desc;
//	document.getElementById('start').style.background = '#ffffff';
	document.getElementById('start').value = data_start;
	
//	if ((data_lat != "") && (data_lng != ""))
//	{
	if (GBrowserIsCompatible())
	{
		var dmap = new GMap2(document.getElementById("dragmap"));
//		var lat_buf = document.getElementsByName('lat').item(0).value;
//		var lng_buf = document.getElementsByName('lng').item(0).value;
//		dmap.addControl(new GLargeMapControl());
//		dmap.addControl(new GMapTypeControl());
//		dmap.addControl(new GScaleControl());
		document.getElementById('lat_buf').value = data_lat;
		document.getElementById('lng_buf').value = data_lng;
		var hogecenter = new GLatLng(data_lat, data_lng);
		dmap.setCenter(hogecenter, 18);

		//draggable属性付きマーカーを生成します
		var hogemarker = new GMarker(hogecenter,{ draggable:true } );
		dmap.addOverlay(hogemarker);
//		dmap.panTo(marker.getPoint());
		//  ======== Add a map overview ==========
//		dmap.addControl(new GOverviewMapControl(new GSize(150,150)));
		GEvent.addListener(hogemarker, 'dragend', function(){
			document.getElementById("lng_buf").value = hogemarker.getPoint().lng();
			document.getElementById("lat_buf").value = hogemarker.getPoint().lat();
//			dmap.panTo(marker.getPoint());
		});
//		dmap.checkResize();
//		/*window.setTimeout(function() { */dmap.panTo(hogecenter);/* }, 4000);*/
	}
	else
	{
		document.getElementById("dragmap").innerHTML = "対応していません。";
	}
//	}
}

/*function getMapXY()
{
//			LatLngObj = map.getCenterLatLng();
	LatLngObj = map.getCenter();
//	document.getElementByName("lng").value = LatLngObj.x;
//	document.getElementByName("lat").value = LatLngObj.y;
}*/


//	http://d.hatena.ne.jp/ginpei/20070811
function makeAutoLink(str) {
    var regexp_url = /((h?)(ttps?:\/\/[a-zA-Z0-9.\-_@:/~?%&;=+#',()*!]+))/g; // ']))/;
    var regexp_makeLink = function(all, url, h, href) {
	return '<a href="h' + href + '">' + url + '</a>';
    }

    return str.replace(regexp_url, regexp_makeLink);
}

