// JavaScript Document

var gmarkers = new Array();
var gicons = new Array();
var map;
var baseURL;

//var baseURL = "./";

function setMap(mapID, mode, url){
	
	baseURL = url + "/images/library/File/map/";
	if (GBrowserIsCompatible()) {
		// ################################
		// 　エリアごとの初期値
		// ################################	
		switch (mapID) {
		case "kuta_legian":
			var firstZoom = 15;
			var zoomLevel = 1;
			var ido = -8.723278; 
			var keido = 115.171138;
			var tileY = 17178;
			var tileX = 26864;
			var tileNum = 11;
			break;
			
		case "seminyakkerobokan":
			var firstZoom = 15;
			var zoomLevel = 1;
			var ido = -8.679542; 
			var keido = 115.155944;
			var tileY = 17176;
			var tileX = 26865;
			var tileNum = 8;
			break;

		case "nusadua":
			var firstZoom = 14;
			var zoomLevel = 1;
			var ido = -8.802466;
			var keido = 115.223065;
			var tileY = 8592;
			var tileX = 13434;
			var tileNum = 9;
			break;
			
		case "benoa":
			var firstZoom = 14;
			var zoomLevel = 1;
			var ido = -8.770742; 
			var keido = 115.225211;
			var tileY = 8591;
			var tileX = 13435;
			var tileNum = 6;
			break;

		case "jimbaran":
			var firstZoom = 13;
			var zoomLevel = 1;
			var ido = -8.780751; 
			var keido = 115.167447;
			var tileY = 4295;
			var tileX = 6715;
			var tileNum = 6;
			break;
			
		case "uluwatu":
			var firstZoom = 13;
			var zoomLevel = 1;
			var ido = -8.811287; 
			var keido = 115.104962;
			var tileY = 4296;
			var tileX = 6714;
			var tileNum = 5;
			break;

		case "sanur":
			var firstZoom = 15;
			var zoomLevel = 1;
			var ido = -8.687602; 
			var keido = 115.259801;
			var tileY = 17176;
			var tileX = 26874;
			var tileNum = 9;
			break;
			
		case "tanahlot":
			var firstZoom = 14;
			var zoomLevel = 1;
			var ido = -8.631515434505888; 
			var keido = 115.0979232788086;
			var tileY = 8584;
			var tileX = 13428;
			var tileNum = 8;
			break;

		case "ubud":
			var firstZoom = 13;
			var zoomLevel = 2;
			var ido = -8.487483121469342; 
			var keido = 115.27095794677734;
			var tileY = 4288;
			var tileX = 6718;
			var tileNum = 12;
			break;
			
		case "east":
			var firstZoom = 11;
			var zoomLevel = 1;
			var ido = -8.403092; 
			var keido = 115.547334;
			var tileY = 1070;
			var tileX = 1680;
			var tileNum = 8;
			break;

		case "west":
			var firstZoom = 11;
			var zoomLevel = 1;
			var ido = -8.272649; 
			var keido = 114.684907;
			var tileY = 1068;
			var tileX = 1674;
			var tileNum = 10;
			break;
			
		case "north":
			var firstZoom = 11;
			var zoomLevel = 1;
			var ido = -8.15032; 
			var keido = 115.317994;
			var tileY = 1068;
			var tileX = 1678;
			var tileNum = 8;
			break;

		default:
			//alert( mapID +"は定義されていないエリアです。");
			break;
		}


		// ################################
		// 　オリジナルマップを組み込む
		// ################################	

		// === 著作権 ===
		var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-180, -180), new GLatLng(180, 180)), 0, "WhiteBearFamily All Rights Reserved.");
		var copyrightCollection = new GCopyrightCollection("Copyright©");
		copyrightCollection.addCopyright(copyright);


		// === タイルレイヤー作成 ===
		var tilelayer = [new GTileLayer(copyrightCollection, 0, 19)];
		tilelayer[0].getTileUrl = function(tile, zoom){


		// === デバッグ === 
		//alert(tile.x + "  : " + tile.y);

			var scale =  Math.pow( 2 , (zoom - firstZoom) );
			var localX = tile.x - (tileX*scale);
			var localY = tile.y - (tileY*scale);
			
			if( (firstZoom <= zoom) && ( zoom <= (firstZoom+zoomLevel) ) ) {
			
				if( (localX < tileNum ) && (0 <= localX) && (localY < tileNum ) && (0 <= localY) ) {
					var imgurl = baseURL + "images/tile_" + mapID + "/" + zoom + "_" + (localY + 1 ) + "_" + (localX +1 ) + ".jpg";					
				}else{
					var imgurl = baseURL + "images/icon/null.jpg";
				}
				
			}else{
				var imgurl = baseURL + "images/icon/null.jpg";	
			}
			
			// === デバッグ === 	
			//var imgurl = baseURL + "images/icon/tileCheck.png";	
			return imgurl;
		};


		// === オリジナルマップを作成	 ===
		var originalMap = new GMapType(tilelayer, G_NORMAL_MAP.getProjection(), "オリジナル");
		
		// === マップオブジェクトを生成 ===
		var opts = {mapTypes : [originalMap]};
		map = new GMap2(document.getElementById("map"),opts);　//オリジナルを初期値として

		//	map = new GMap2(document.getElementById("map"));
		//map.addMapType(originalMap);
		//map.setMapType(originalMap);

		// === 中心点設定 ===
		//map.setCenter(new GLatLng( ido, keido), firstZoom);
		if( (getHikisuu.data.lat == null ) || (getHikisuu.data.lng == null) ){
			map.setCenter(new GLatLng( ido, keido), firstZoom);
		}else{
			map.setCenter(new GLatLng( getHikisuu.data.lat, getHikisuu.data.lng), firstZoom);
		}


		// === インターフェース追加 ===
		map.addControl(new GSmallMapControl());		
		//map.addControl(new GMapTypeControl());
		if("input" == mode ) {
			setCentermarker();
		};
															 

		// === 透明度設定 ===
		//tilelayer[0].getOpacity = function(){ return 1;};


		// ===== ズームレベル制限 =====	
		GEvent.addListener(map, "zoomend", function(oldZoomLevel,newZoomLevel){
			if( (newZoomLevel < firstZoom) || ( (firstZoom + zoomLevel) < newZoomLevel)){
				map.setZoom(oldZoomLevel);
			};
		} );


		// ################################
		// 　　　　カテゴリ選択
		// ################################	

		// ===== アイコンデータ =====	

		gicons["hotel1"] = new GIcon(G_DEFAULT_ICON, baseURL+"images/icon/hotel.gif");
		gicons.hotel1.iconSize = new GSize(22, 24);
		gicons.hotel1.iconAnchor = new GPoint(22, 0);
		gicons.hotel1.infoWindowAnchor = new GPoint(22, 0);
		gicons.hotel1.infoShadowAnchor = new GPoint(22, 0);
		gicons.hotel1.shadow = false;
		
		gicons["hotel2"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/hotel.gif");
		gicons.hotel2.iconSize = new GSize(22, 24);
		gicons.hotel2.iconAnchor = new GPoint(22, 0);
		gicons.hotel2.infoWindowAnchor = new GPoint(22, 0);
		gicons.hotel2.infoShadowAnchor = new GPoint(22, 0);
		gicons.hotel2.shadow = false;

		gicons["hotel3"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/hotel.gif");
		gicons.hotel3.iconSize = new GSize(22, 24);
		gicons.hotel3.iconAnchor = new GPoint(22, 0);
		gicons.hotel3.infoWindowAnchor = new GPoint(22, 0);
		gicons.hotel3.infoShadowAnchor = new GPoint(22, 0);
		gicons.hotel3.shadow = false;

		gicons["hotel4"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/hotel.gif");
		gicons.hotel4.iconSize = new GSize(22, 24);
		gicons.hotel4.iconAnchor = new GPoint(22, 0);
		gicons.hotel4.infoWindowAnchor = new GPoint(22, 0);
		gicons.hotel4.infoShadowAnchor = new GPoint(22, 0);
		gicons.hotel4.shadow = false;

		gicons["hotel5"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/hotel.gif");
		gicons.hotel5.iconSize = new GSize(22, 24);
		gicons.hotel5.iconAnchor = new GPoint(22, 0);
		gicons.hotel5.infoWindowAnchor = new GPoint(22, 0);
		gicons.hotel5.infoShadowAnchor = new GPoint(22, 0);
		gicons.hotel5.shadow = false;
		  
		gicons["spa"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/spa.gif");
		gicons.spa.iconSize = new GSize(22, 24);
		gicons.spa.iconAnchor = new GPoint(0, 0);
		gicons.spa.infoWindowAnchor = new GPoint(0, 0);
		gicons.spa.infoShadowAnchor = new GPoint(0, 0);
		gicons.spa.shadow = false;
		
		gicons["restaurant"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/restaurant.gif");
		gicons.restaurant.iconSize = new GSize(22, 24);
		gicons.restaurant.iconAnchor = new GPoint(22, 24);
		gicons.restaurant.infoWindowAnchor = new GPoint(22, 24);
		gicons.restaurant.infoShadowAnchor = new GPoint(22, 24);
		gicons.restaurant.shadow = false;
		
		gicons["viewspot"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/viewspot.gif");
		gicons.viewspot.iconSize = new GSize(22, 24);
		gicons.viewspot.iconAnchor = new GPoint(0, 0);
		gicons.viewspot.infoWindowAnchor = new GPoint(0, 0);
		gicons.viewspot.infoShadowAnchor = new GPoint(0, 0);
		gicons.viewspot.shadow = false;
		
		gicons["shopping"] = new GIcon(G_DEFAULT_ICON,baseURL+"images/icon/shopping.gif");
		gicons.shopping.iconSize = new GSize(22, 24);
		gicons.shopping.iconAnchor = new GPoint(0, 24);
		gicons.shopping.infoWindowAnchor = new GPoint(0, 24);
		gicons.shopping.infoShadowAnchor = new GPoint(0, 24);
		gicons.shopping.shadow = false;

				
		// ===== カテゴリ選択実行部 ===== 
		GDownloadUrl(baseURL+"map_" + mapID + ".xml", function(doc) {

			var xmlDoc = GXml.parse(doc);
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var y = parseFloat(markers[i].getAttribute("y"));
				var x = parseFloat(markers[i].getAttribute("x"));
				var point = new GLatLng(x, y);//x：緯度　y：経度
				var ID = markers[i].getAttribute("ID");
				var html = markers[i].getAttribute("html");
				var category = markers[i].getAttribute("category");
				var marker = createMarker(point,ID,html,category);
				map.addOverlay(marker);
			}
			
			show("hotel1");
			show("hotel2");
			show("hotel3");
			show("hotel4");
			show("hotel5");
			show("spa");
			show("restaurant");
			show("viewspot");
			show("shopping");
			
			// ===== 引数を調べてポップをだす
			for (var i = 0; i < gmarkers.length; i++) {
				if(gmarkers[i].myname == getHikisuu.data.code){
					gmarkers[i].openInfoWindowHtml(gmarkers[i].myhtml);
				}
			}

			
		});

	}

}


// ===== カテゴリ選択のファンクション =====	
function createMarker(point,ID,html,category) {
	var marker = new GMarker(point,gicons[category]);
	marker.mycategory = category;                                 
	marker.myname = ID;
	marker.myhtml = html;
	GEvent.addListener(marker, "click", function() {
	marker.openInfoWindowHtml(html);
	});
	gmarkers.push(marker);
	return marker;
}
		
function show(category) {
	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].mycategory == category) {
			gmarkers[i].show();
		}
	}
	var obj = category+"box";
	document.getElementById(obj).checked = true;
}
		
function hide(category) {
	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].mycategory == category) {
			gmarkers[i].hide();
		}
	}
	var obj = category+"box";
	document.getElementById(obj).checked = false;
	map.closeInfoWindow();
}

function boxclick(box,category) {
	if (box.checked) {
		show(category);
	} else {
		hide(category);
	}
}


// ===== 座標取得 =====	
function getMapXY() {
	//	LatLngObj = map.getCenterLatLng();
	LatLngObj = map.getCenter();
	document.getElementById("mapX").value = (Math.round((LatLngObj.x+0.0000009)*1000000)/1000000);
	document.getElementById("mapY").value = (Math.round((LatLngObj.y+0.0000009)*1000000)/1000000);
}


function setCentermarker(){
	var markObj = document.createElement("div");
	var mapW = parseInt(map.getContainer().style.width);
	var mapH = parseInt(map.getContainer().style.height);
	var markW = 31; // センターマークの横幅（ピクセル数）
	var markH = 31; // センターマークの縦幅（ピクセル数）
	var x = (mapW - markW) / 2; // センターマークの中心位置（X座標）
	var y = (mapH - markH) / 2; // センターマークの中心位置（Y座標）
	markObj.style.position = "absolute";
	markObj.style.top = y+"px";
	markObj.style.left = x+"px";
	markObj.style.backgroundImage = "URL(" + baseURL + "images/icon/centerMark.gif)";
	markObj.style.width = markW+"px";
	markObj.style.height = markH+"px";
	markObj.style.opacity = 0.5;
	map.getContainer().appendChild(markObj);	
}


// ===== 引数を受けて中心に =====	
function getHikisuu(){
     getHikisuu.data = new Array();
     getHikisuu.string = location.search.substring(1);//?をサプレス
     getHikisuu.string = getHikisuu.string.split('&');
     for(var i = 0; i != getHikisuu.string.length; i++) {
         getHikisuu.data[ck_shikibetushi(getHikisuu.string[i].split('=')[0])] 
                               =  Escape(unescape(getHikisuu.string[i].split('=')[1]));
     }

     function ck_shikibetushi(shiki){ //識別子（プロパティ）の命名チェック
         shiki_TOP = shiki.substring(0,1);
         if(shiki_TOP.match(/[a-zA-Z_$]/g) == null){
            //alert(shiki+"の引数が不正です。（一文字目は、ASCII、_、$、のいずれかです。）");
            return null;
         }
         else if(shiki.match(/[^a-zA-Z0-9_$]/g) != null){
            //alert(shiki+"の引数が不正です。（命名文字は、ASCII、数字、_、$、のいずれかです。）");
            return null;
         } 
         return shiki;
     }

     function Escape(str){ //文字参照へ変換 
          str = str.replace( /\&/g, '&amp;' );
          str = str.replace( /</g, '&lt;' ); 
          str = str.replace( />/g, '&gt;' ); 
          str = str.replace( /\"/g, '&quot;' );
          str = str.replace( /\'/g, '&#39;' );
          return str;
    }
} new getHikisuu();