// JavaScript Document

/////////////////////////////////////////////////////////////////////////////////////
// MAIN SCRIPT
/////////////////////////////////////////////////////////////////////////////////////

//GMap2
var map;
var MUSHIKAGO_MAP;
var mMapType;
var mapMarkers = new Object(); //地図内マーカーの配列

//著作権情報
var copyrightYear = "<span class=\"fontColor\">2003-2012</span> ";
var copyrightLink = "<a href=\"javascript:mouseClick('CompanyInfo')\" class=\"linkColor\" >MUSHIKAGO DESIGN STUDIO Inc.</a>  <span class=\"fontColor\">[Google Maps API Version, since 2009.01.01]</span>";

// ランダムイメージ
var homeList = new Array();
homeList.push("HOME_20120101");
homeList.push("HOME_20110610");
homeList.push("HOME_20110401");
homeList.push("HOME_20110101");
homeList.push("HOME_20101113");
homeList.push("HOME_20100721");
homeList.push("HOME_20100404");
homeList.push("HOME_20100207");
homeList.push("HOME_20100101");
homeList.push("HOME_20091225");
homeList.push("HOME_20091123");
homeList.push("HOME_20091024");
homeList.push("HOME_20090912");
homeList.push("HOME_20090808");
homeList.push("HOME_20090714");
homeList.push("HOME_20090611");
homeList.push("HOME_20090505");
homeList.push("HOME_20090406");
homeList.push("HOME_20090315");
homeList.push("HOME_20090215");
homeList.push("HOME_20090201");
homeList.push("HOME_20090113");
homeList.push("HOME_20090101");

var selected = Math.round(Math.random() * (homeList.length - 1));

//パラメータ指定優先
if(param = location.search){
        //var parray = param.replace('?','').split('&');
		var parray = param.replace('?','')
		var n = parray.split('=');
        selected = n[1];
}

//固定HOME
//selected = 0;

//チェックモード
var check = false;

//var selected = 1;
/*
if(!randomMode){
	selected = 0;
}
*/
//初期設定
//var initialCenter = new GLatLng(5.97579182443353, 31.13046884536743) ;//GLatLng(14.593693,46.622951);
//var initialCenter = new GLatLng(-3.0645815829582417, 37.35853672027588) ;
//var initialCenter = new GLatLng(15.284185114076445, -20.56640625) ; //200901
//var initialCenter = new GLatLng(-14.902321826141796, -40.6494140625) ; //20090113
//var initialCenter = new GLatLng(22.221039,9.6) ; //20090201
//var initialCenter = new GLatLng(22.06527806776582,9.755859375)  //20090201
//var initialCenter = new GLatLng(35.17380831799959,-100.01953125)  //20090215
//var initialCenter = new GLatLng(22.59372606392931,57.919921875)  //20110401
//var initialCenter = new GLatLng(22.67484735118852, 57.83203125);  //20110610


//var initialCenter = new GLatLng(topImageList[selected].lat, topImageList[selected].lng);  //20110610
//var initialZoom=3;


//各値
var zoomMax = 5 //19 //5
var zoomMin=2 //0 //2
var defaultZoom = 3;
var pictureMode=true;

var homeCenter;
var homeZoom = 1;

//スマホチェック
var agent = navigator.userAgent;
var sumaho = false;
if(agent.search(/iPhone/) != -1){
	sumaho = true;
}else if(agent.search(/Android/) != -1){
	sumaho = true;
}


//Constants
var mainXMLPath = "xml/top.xml";
var tileDir = "images/tiles/" + homeList[selected] + "/";
var markerHTMLDir = "xml/marker/";
var markerHTMLExt = ".html";
var markerIconDir = "images/icons/MarkerIcons/"

/////////////////////////////////////////////////////////////////////////////////////
// ON LOAD
/////////////////////////////////////////////////////////////////////////////////////
function load() {
	//resizeMapSize();
	if (GBrowserIsCompatible()) {
		var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 0, copyrightLink);
		var copyrightCollection = new GCopyrightCollection("<span class=\"fontColor\">Copyright &copy;</span> " + copyrightYear);
		copyrightCollection.addCopyright(copyright);
		
		//カスタムレイヤーの生成
		var pic_tileLayers = [ new GTileLayer(copyrightCollection , 0, 30)];
		pic_tileLayers[0].getTileUrl = customGetTileURL;
		pic_tileLayers[0].isPng = function() { return false; };
		pic_tileLayers[0].getOpacity = function() { return 1.0; };
		MUSHIKAGO_MAP = new GMapType(pic_tileLayers, new GMercatorProjection(zoomMax+1), "虫カゴMAP", {maxResolution:zoomMax, minResolution:zoomMin, errorMessage:"これ以上は作ってないよ！"});
		
		//カスタムマップの生成. Would normally be G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP
		map = new GMap2(document.getElementById("map"),{mapTypes:[MUSHIKAGO_MAP]});
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		//map.addControl(new GOverviewMapControl());
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		
		//初期位置の設定
		//map.setCenter(initialCenter, initialZoom, MUSHIKAGO_MAP);
		
		//マップタイプの記憶
		mMapType = map.getCurrentMapType();
	/////////////////////////////////////////////////////////////////////////////////////
	//マーカーの追加
		//map.addOverlay(new GMarker(initialCenter));
		if(check){
			GEvent.addListener(map, "move", function(){
				var x = (map.getCenter()).lng();
				var y = (map.getCenter()).lat();
				var z = map.getZoom();
				document.getElementById("point").innerHTML = "Lat=" + y + "<br>Lng=" + x + "<br>zoomLevel=" + z +  "<br>selected=" + selected;
			});
		}
	/////////////////////////////////////////////////////////////////////////////////////
	//スマホの場合はドラッグできない。
	/*
	var agent = navigator.userAgent;
	if(agent.search(/iPhone/) != -1){
		map.disableDragging();
	}else if(agent.search(/Android/) != -1){
		map.disableDragging();
	}
	*/
	if(sumaho){
		var mobtopimg = homeList[selected].replace("HOME_", "LETTERS_"); 
		document.getElementById("back").innerHTML = '<a href="javascript:backToTop();">Back To Top</a>';
		document.getElementById("mobtop").innerHTML = '<img src="/xml/marker/images/' + mobtopimg + '.jpg" alt="MUSHIKAGO TOP" width="437" height="307" />';
	}
	/////////////////////////////////////////////////////////////////////////////////////
	
		//document.getElementById("point").innerHTML = " [Google Maps API  Version, since 2009.01.01]";
	/////////////////////////////////////////////////////////////////////////////////////
	//alert("xml/top.xml?noCache=" + Math.random());
	loadData(mainXMLPath + "?noCache=" + Math.random());
	}
}

/////////////////////////////////////////////////////////////////////////////////////
// LOCAL FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////////

function customGetTileURL(a,b) {
	var c=Math.pow(2,b);
	var d=a.x;
	var e=a.y;
	var f="t";
	for(var g=0;g<b;g++){
		c=c/2;
		if(e<c){
			if(d<c){f+="q"}
			else{f+="r";d-=c}
		}
		else{
			if(d<c){f+="t";e-=c}
			else{f+="s";d-=c;e-=c}
		}
	}
	return tileDir+f+".jpg"
}

function createMarker(point, label, id, zoom, iconType) {
	var mMarker = new Object();
	mMarker.marker = new GMarker(point, {icon:makeIcon(iconType), title:label});
	//mMarker.marker = new GMarker(point, {title:label});
	mMarker.zoom = zoom
	GEvent.addListener(mMarker.marker, "click", function() {
		//mMarker.marker.openInfoWindowHtml(html);
		openMarkerWindow(mMarker.marker, id, label);
	});
	return mMarker;
}

/////////////// Original ///////////////

function openMarkerWindow(aMarker, aID, aLabel){
	var filename = aID;
	filename = filename.replace("HOME_", "LETTERS_"); 
	
	var httpObj = GXmlHttp.create();
	httpObj.open("get", markerHTMLDir + filename + markerHTMLExt + "?noCache=" + Math.random());
	//httpObj.open("get", markerHTMLDir + aID + markerHTMLExt);
	
	httpObj.onreadystatechange = function(){
		if(httpObj.readyState == 4){
			//alert(aLabel);
			var latLng = aMarker.getPoint();
			//map.openInfoWindow(latLng, httpObj.responseText + "<strong>" + aLabel + ".</strong>");
			//aMarker.openInfoWindowHtml(httpObj.responseText + "<br><strong>" + aLabel + ".</strong>");
			aMarker.openInfoWindowHtml(httpObj.responseText);
		}
	}
	httpObj.send(null);
	//aMarker.marker.openInfoWindowHtml(aURL);
}

function loadData(path){
	
	GDownloadUrl(path, function(data, responseCode) { // XMLファイルの名称・場所
		if(responseCode == 200) {
		  var xml = GXml.parse(data);
		  var markers = xml.documentElement.getElementsByTagName("marker");
		  var homes = xml.documentElement.getElementsByTagName("home");
		  //var side_bar = document.getElementById("side_bar");
		  //side_bar.innerHTML = "";
		  //alert(markers.length);
		  //alert(homes.length);
		  for (var i = 0; i < markers.length; i++) {
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
			var label = markers[i].getAttribute("label");
			var id = markers[i].getAttribute("id");
			var zoom = markers[i].getAttribute("zoom");
			var iconType = markers[i].getAttribute("icon");
			var mMarker = createMarker(point, label, id, zoom, iconType);
			map.addOverlay(mMarker.marker);
			//var side_barEntry = createside_barEntry(marker, label);
			//side_bar.appendChild(side_barEntry);
			//GEvent.addListener(marker, "click", function(){ alert("Click!"); });
			mapMarkers[id] = mMarker;
		  }
		  
		  //home
		  for (var x = 0; x < homes.length; x++){
			if(homes[x].getAttribute("id")  == homeList[selected]){
				homeCenter = new GLatLng(parseFloat(homes[x].getAttribute("lat")), parseFloat(homes[x].getAttribute("lng")));
				homeZoom = homes[x].getAttribute("zoom");
				
				var point = homeCenter;
				var label = homes[x].getAttribute("label");
				var id = homes[x].getAttribute("id");
				var zoom = homeZoom;
				var iconType = homes[x].getAttribute("icon");
				var mMarker = createMarker(point, label, id, zoom, iconType);
				map.addOverlay(mMarker.marker);
				mapMarkers[id] = mMarker;
			}
		  }
		  //初期移動
		  //map.panTo(mapMarkers["HOME"].marker.getPoint());
		  
		//home
		//homeClick();
		GEvent.trigger(mapMarkers[homeList[selected]].marker,"click");
		map.setCenter(homeCenter, parseInt(homeZoom), MUSHIKAGO_MAP);
		  
		} else if(responseCode == -1) {
		   alert("ごめんなさい、タイムアウトです。 ...");
		} else { 
		   alert("ごめんなさい、読み込みエラーです。 ...");
		}
		});
}

function homeClick(){
	//初期位置の設定
	//alert(homeZoom);
	//初期ポップアップ起動
	//GEvent.trigger(mapMarkers["HOME"].marker,"click");
	GEvent.trigger(mapMarkers[homeList[selected]].marker,"click");
	map.setCenter(homeCenter, parseInt(homeZoom), MUSHIKAGO_MAP);
	
	//scroll
	scrollToWindow("map");
}

//クリックイベント
function mouseClick(id_str){
	
	//alert(map.continuousZoomEnabled);
	//map.addOverlay(new GMarker(new GLatLng(14.593693,46.622951)));
	//alert(mapMarkers[id_str].zoom);
	
	switch(id_str){
		case "OFFICE" :
			map.setCenter(mapMarkers[id_str].marker.getPoint(), parseInt(mapMarkers[id_str].zoom), G_NORMAL_MAP)
			break
		case "FaceBook" :
		case "LETTERS_20070101" :
		case "LETTERS_20080101" :
		case "LETTERS_20090101" :
		case "LETTERS_20090113" :
		case "LETTERS_20090201" :
		case "LETTERS_20090215" :
		case "LETTERS_20090315" :
		case "LETTERS_20090406" :
		case "LETTERS_20090505" :
		case "LETTERS_20090611" :
		case "LETTERS_20090714" :
		case "LETTERS_20090808" :
		case "LETTERS_20090912" :
		case "LETTERS_20091024" :
		case "LETTERS_20091123" :
		case "LETTERS_20091225" :
		case "LETTERS_20100101" :
		case "LETTERS_20100207" :
		case "LETTERS_20100404" :
		case "LETTERS_20100721" :
		case "LETTERS_20101113" :
		case "LETTERS_20110101" :
		case "LETTERS_20110401" :
		case "LETTERS_20110610" :
		case "LETTERS_20120101" :
			/*
			if(pictureMode){
				pictureMode = false;
				if(id_str == "OFFICE"){
					setMapMode(pictureMode, G_NORMAL_MAP);
				}else{
					setMapMode(pictureMode, G_HYBRID_MAP);
				}
			}
			*/
			map.setCenter(mapMarkers[id_str].marker.getPoint(), parseInt(mapMarkers[id_str].zoom), G_HYBRID_MAP)
			//map.setCenter(mapMarkers[id_str].marker.getPoint(), 4)
			//map.setCenter(mapMarkers[id_str].marker.getPoint(), parseInt(mapMarkers[id_str].zoom))
			//GLog.write(parseInt(mapMarkers[id_str].zoom))
			//map.setCenter(new GLatLng(37, 138), 6)
			break;
		default :
			/*
			if(!pictureMode){
				pictureMode = true;
				setMapMode(pictureMode, null);
			}
			*/
			//map.panTo(mapMarkers[id_str].marker.getPoint());
			//map.setZoom(parseInt(mapMarkers[id_str].zoom));
			//map.setCenter(mapMarkers[id_str].marker.getPoint(), parseInt(mapMarkers[id_str].zoom) );
			map.setCenter(mapMarkers[id_str].marker.getPoint(), defaultZoom,  MUSHIKAGO_MAP);
			//↓元"HOME"
			//map.setCenter(initialCenter, initialZoom, MUSHIKAGO_MAP); //地図タイプ- G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP
			break;
	};
	//GLog.write(parseInt(mapMarkers[id_str].zoom))
	//map.setZoom(parseInt(mapMarkers[id_str].zoom));
	GEvent.trigger(mapMarkers[id_str].marker,"click");
	
	//scroll
	scrollToWindow("map");
}

//未使用
function setMapMode(aMode, aType){
	if(aMode){
		map.setMapType(MUSHIKAGO_MAP);
		//map.setMapType(G_NORMAL_MAP);
		//map.addMapType(G_SATELLITE_3D_MAP)
		//map.removeMapType(G_NORMAL_MAP);
		//map.removeMapType(G_SATELLITE_MAP);
		//map.removeMapType(G_HYBRID_MAP);
	}else{
		map.setMapType(G_NORMAL_MAP);
		//map.addMapType(G_NORMAL_MAP);
		//map.addMapType(G_SATELLITE_MAP);
		//map.addMapType(G_HYBRID_MAP);
		//map.removeMapType(mMapType);
	}
}

//タイプ変更メソッド
function switchType(arg){
	map.setMapType(arg);
}

function makeIcon(iconType){
	var mIcon = new GIcon();
	//mIcon.image = "images/icons/ballblue1.gif";
	mIcon.image = markerIconDir + iconType + ".png"; //"2007_inoshishi.png";
	mIcon.shadow = markerIconDir + "0000_shadow.png";
	mIcon.iconSize = new GSize(38, 35);
	mIcon.shadowSize = new GSize(54, 40);
	mIcon.iconAnchor = new GPoint(0, 35);
	mIcon.infoWindowAnchor = new GPoint(23, 16);
	return mIcon;
}

/////////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS FOR WINDOW DOCUMENT
/////////////////////////////////////////////////////////////////////////////////////

function resizeMapSize() {
	var d=document.getElementById("map");
	var offsetTop=0;
	var offsetRight = 300;
	for (var elem=d; elem!=null; elem=elem.offsetParent) {
		offsetTop+=elem.offsetTop;
	}
	var height=getWindowHeight()-offsetTop-16;
	if (height>=0) {
		d.style.height=height+"px";
	}
	
	var width=getWindowWidth()-offsetRight-16;
	if (width>=0) {
		d.style.width=width+"px";
	}
}

function getWindowHeight() {
	if (window.self&&self.innerHeight) {
		return self.innerHeight;
	}
	if (document.documentElement&&document.documentElement.clientHeight) {
		return document.documentElement.clientHeight;
	}
	return 0;
}

function getWindowWidth() {
	if (window.self&&self.innerWidth) {
		return self.innerWidth;
	}
	if (document.documentElement&&document.documentElement.clientWidth) {
		return document.documentElement.clientWidth;
	}
	return 0;
}


function scrollToWindow(aID)
{
	//var xpos= document.getElementById(aID).value;
	var ypos= document.getElementById(aID).offsetTop;
	//alert("Scroll to X-"+xpos+" and Y-"+ypos);
	window.scroll(0,ypos);
}
function backToTop()
{
	window.scroll(0,0);
}
