/*
(c) 2009 Naphthalene Co.,Ltd.
tvdog
http://naph.jp
*/

GlobeTrotter.top = function(){
	
	//GoogleMapのオブジェクト
	var gmap;
	
	//初期座標
	var def_lat = 13.424935;
	var def_lng = 99.9699017;
	var def_zoom = 15;
	
	//マップのタイプを格納
	var mapType = "satellite";
	
	//GoogleMapを設置するdivのID
	var mapAreaID = "map_area";
	var mapID = "gmap";
	
	//naviのモードを格納
	var naviMode = "";
	
	
	T = {
		init : function(){
			
			$("body").css({overflow:"hidden"});
			$("#container").css({overflow:"hidden"});
			$("#content").css({overflow:"hidden"});
			$("#archives").css({overflow:"hidden"});
			$("#archives ul").empty();
			
			$("body").prepend('<ul id="archives_control"><li id="archives_up"></li><li id="archives_down"></li></ul>');
			$("#archives_up").bind( "click", archivesUp);
			$("#archives_down").bind( "click", archivesDown);
			$("#archives").mousewheel(archivesWheel);
			$("#bt_tag").bind("click", topTagNavi);
			$("#bt_area").bind("click", topAreaNavi);
			$("#bt_archives").bind("click", topArchivesNavi);
			
			$.ajax({
				url : GlobeTrotter.homePath + "xml/index.xml",
				dataType : "xml",
				timeout : 1000*10,
				success : loadIndexXmlSuccess
			});
		},
		
		//マップのタイプを変える
		typeChange : function(t){
			typeChange(t);
		},
		
		//タグ検索
		tagSearch : function(s){
			var ar = [];
			$(topData).find("archives").each(function(){
				var t  = $(this).find("tag").text();
				var ta = t.split(",");
				for (var i in ta) {
					if (ta[i] == s) {
						ar.push(this);
					}
				}
			});
			
			setArchives(ar);
		}
	};
	
	//index.xmlのロードのハンドラ
	function loadIndexXmlSuccess(xml){
		topData = xml;
		setAllArchives();
		setGMap();
		
	}
	
	//
	function setGMap(){
		
		var first = $(topData).find("archives:first");
		
		def_lat = first.attr("lat");
		def_lng = first.attr("lon");
		def_zoom = parseInt(first.attr("zoom"));
		
		//GoogleMapを設置
		var h = '<div id="' + mapAreaID + '"><div id="' + mapID + '"></div></div>';
		h += '<div id="type_control"><ul><li id="type_normal" onclick="GlobeTrotter.top.typeChange(\'normal\')"></li>';
		h += '<li id="type_satellite" onclick="GlobeTrotter.top.typeChange(\'satellite\')"></li>';
		h += '<li id="type_physical" onclick="GlobeTrotter.top.typeChange(\'physical\')"></li></ul><div>';
		
		$("body").prepend(h);
		
		gmap = new GMap2( $("#"+mapID).get(0));
		gmap.setCenter(new GLatLng(def_lat, def_lng), def_zoom, G_SATELLITE_MAP);
		gmap.enableScrollWheelZoom();
		
		//アイコンの作成
		iconPoint = new GIcon();
		iconPoint.image = GlobeTrotter.commonPath + "img/icon_point.png";
		iconPoint.iconSize = new GSize(16, 16);
		iconPoint.iconAnchor = new GPoint(6, 6);
		
		tilelayer = new GTileLayer(new GCopyrightCollection());
		tilelayer.getTileUrl = function() { return GlobeTrotter.commonPath + "img/ami_ten_kuro.gif"; };
		tilelayer.getOpacity = function() { return 1; };
		gmap.addOverlay(new GTileLayerOverlay(tilelayer));
	}
	
	//アーカイブのマウスオーバーの設定
	function archiveOver(e){
		var ta = $(e.currentTarget);
		ta.find("h3").css("visibility", "visible");
		
		if (naviMode != "area") {
			var id = ta.attr("id");
			var t;
			
			$(topData).find("archives").each(function(){
				var logs = $(this);
				if (logs.find("time").text() == id) t = logs;
			});
			
			var lat = t.attr("lat");
			var lng = t.attr("lon");
			var zoom = parseInt( t.attr("zoom") );
			
			gmap.setCenter(new GLatLng(lat,lng), zoom);
		}
	}
	
	function archiveOut(e){
		$(e.currentTarget).find("h3").css("visibility", "hidden");
	}
	
	//全てのアーカイブを表示
	function setAllArchives(){
		var ar = [];
		$(topData).find("archives").each(function(){
			ar.push(this);
		});
		setArchives(ar);
	}
	
	//アーカイブを設置する
	function setArchives(ar){
		var html = '';
		for (i in ar) {
			var time  = $(ar[i]).find("time").text();
			var title = $(ar[i]).find("title").text();
			var date = $(ar[i]).find("date").text();
			var area = $(ar[i]).find("area").text();
			
			html += '<li id="' + time + '"><div class="archive_bg"></div>';
			html += '<img src="' + GlobeTrotter.homePath + 'img/' + time + '.jpg" width="340" height="192" />';
			html += '<h3><a href="/tektek/archives/' + time + '/">' + title + '</a></h3>';
			html += '<p class="area">' + area + '</p>';
			html += '<p class="date">' + date + '</p></li>';
		}
		
		$("#archives ul").empty().append(html);
		$("#archives li").mouseover(archiveOver).mouseout(archiveOut);
		archivesScrollCheck();
	}
	
	//インデックスページのマーカーを作ります。
	function creatIndexMarker(lat, lng, title, time) {
		var marker = new GMarker(new GLatLng(lat, lng), {icon:iconPoint, title:title});
		marker.time = time;
		GEvent.addListener(marker, 'click', function(){location.href = "archives/" + this.time});
		gmap.addOverlay(marker);
	}
	
	//アーカイブのボタン群
	function archivesUp(e) {
		archivesScrollTopAnime(-226);
	}
	function archivesDown(e) {
		archivesScrollTopAnime(226);
	}
	
	//アーカイブのホイール移動
	function archivesWheel(e, d) {
		archivesScrollTop(d * -50);
	}
	
	//アーカイブのスクロール
	function archivesScrollTop(s){
		$("#archives").scrollTop(archivesScrollVal(s));
	}
	
	//アーカイブのスクロールのアニメーション版
	function archivesScrollTopAnime(s){
		$("#archives").stop()
		.animate({scrollTop:archivesScrollVal(s)},{duration:300, easing:"easeOutCubic"});
	}
	
	//アーカイブのスクロールの範囲設定
	function archivesScrollVal(s){
		var wh = $(window).height();
		var sh = $("#archives").attr("scrollHeight") - wh + s;
		var se = $("#archives").scrollTop() + s;
		
		if (se > sh) {
			se = sh;
		} else if (se < 0) {
			se = 0;
		}
		
		return se;
	}
	
	function archivesScrollCheck() {
		var wh = $(window).height();
		var sh = $("#archives").attr("scrollHeight") - wh;
		
		if (sh > 0) {
			$("#archives_control").css({display:"block"});
		} else {
			$("#archives_control").css({display:"none"});
		}
	}
	
	/*
	* トップのナビ関連
	********************************************************/
	//タグボタン
	function topTagNavi(){
		if (naviMode == "tag") return false;
		topClearNavi();
		naviMode = "tag";
		
		typeChange("satellite");
		gmap.setCenter(new GLatLng(def_lat, def_lng), def_zoom);
		
		var tag = [];
		
		$(topData).find("archives").each(function(){
			var t  = $(this).find("tag").text();
			var ta = t.split(",");
			for (var i in ta) {
				tag[ta[i]] = true;
			}
		});
		
		var h = '<ul id="tags">';
		for (var n in tag) {
			h += '<li onclick="GlobeTrotter.top.tagSearch(\'' + n + '\')">' + n + '</li>';
		}
		h += '</ul>';
		
		$("body").prepend(h);
		
		return false;
	}
	
	//エリアボタン
	function topAreaNavi(){
		if (naviMode == "area") return false;
		topClearNavi();
		naviMode = "area";
		
		typeChange("physical");
		gmap.setCenter(new GLatLng(13.8060,99.4699), 6);
		
		$(topData).find("archives").each(function(){
			var lat   = $(this).attr("lat");
			var lng   = $(this).attr("lon");
			var time  = $(this).find("time").text();
			var title = $(this).find("title").text();
			creatIndexMarker(lat,lng,title,time);
		});
		
		return false;
	}
	
	//アーカイブボタン
	function topArchivesNavi(){
		if (naviMode == "archives") return false;
		topClearNavi();
		naviMode = "archives";
		
		typeChange("satellite");
		gmap.setCenter(new GLatLng(def_lat, def_lng), def_zoom);
		
		return false;
	}
	
	//ナビのモードチェンジの後処理
	function topClearNavi(){
		if (naviMode == "tag") {
			$("#tags").remove();
			setAllArchives();
		} else if (naviMode == "archives") {
			$("#tags").remove();
			setAllArchives();
		} else if (naviMode == "area") {
			gmap.clearOverlays();
			gmap.addOverlay(new GTileLayerOverlay(tilelayer));
		}
	}
	
	//---------------------------------------------------------------- common
	//GoogleMapのタイプを変更します。
	function typeChange(t) {
		$("#type_" + mapType).css("backgroundPosition","top left");
		mapType = t;
		
		if (t == "normal") {
			$("#type_normal").css("backgroundPosition","bottom left");
			gmap.setMapType(G_NORMAL_MAP);
		} else if (t == "satellite") {
			$("#type_satellite").css("backgroundPosition","bottom left");
			gmap.setMapType(G_SATELLITE_MAP);
		} else if (t == "physical") {
			$("#type_physical").css("backgroundPosition","bottom left");
			gmap.setMapType(G_PHYSICAL_MAP);
		}
	}
	
	return T;
}();

$(document).ready(function(){GlobeTrotter.top.init();});

