var iconColor = "orange";
var iconColor1 = "green";
var mapHtmls = [];
var dispList = [];
var mapMarkers = [];
var map;
var infoWindow = new google.maps.InfoWindow;
var openInfowindow;

/* 住所検索（必要な場合は付加する）
var geocoder;
geocoder = new google.maps.Geocoder();
*/
/* div要素 addressをhtmlに付加して利用する場合
function codeAddress() {
    var address = document.getElementById("address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
      } else {
        alert("場所を特定できません。 理由: " + status);
      }
    });
}
*/

function load() {
/*  取得するIPアドレスから初期LatLngを指定する機能：不特定地点に適用
	var basic_lat=35.694003;
	var basic_lng=139.753595;
	var cl = google.loader.ClientLocation;
		if(cl !== null){
			basic_lat = parseFloat(cl.latitude);
			basic_lng = parseFloat(cl.longitude);
		}else{
			basic_lat = IP未処理の場合の初期数値;
			basic_lng = IP未処理の場合の初期数値;
		}
        //以下をcenter値へと置換する
    	center: new google.maps.LatLng(basic_lat, basic_lng),
*/
	map = new google.maps.Map(document.getElementById("map"), {
    	center: new google.maps.LatLng(49.95121990866204, 9.140625),
    	zoom: 4,
    	mapTypeId : google.maps.MapTypeId.TERRAIN,
    	mapTypeControl : true,
		mapTypeControlOptions : {
			position : google.maps.ControlPosition.TOP_LEFT
		},
		scrollwheel : true,
		navigationControl : true,
		navigationControlOptions : {
			position : google.maps.ControlPosition.TOP_LEFT,
			style : google.maps.NavigationControlStyle.ANDROID
		},
		scaleControl : true,
		scaleControlOptions : {
			position : google.maps.ControlPosition.BOTTOM_LEFT
		}
    	});
	//読み込み時に最初に表示させるべき画像の配置指定
	basicMap('./europe/xml/europe_index.xml');
}

/*
	//div要素を消去する場合のOption 使用保留 by jQuery
	$(document).ready(function(){
	$("#btn").click(function(){
	$("#window").remove();
	});
	});
*/

function basicMap(xmlUrl){
		clearMarker();
        downloadUrl(xmlUrl, function(data) {
        var xml = parseXml(data);
        var markers = xml.documentElement.getElementsByTagName("items");
		dispList.length = 0;
		dispList = "";
		dispList += "<b>情報がある国と都市</b><br />";
        for (var i=0; i < markers.length; i++) {
          var name = markers[i].getElementsByTagName("name")[0].firstChild.nodeValue;
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getElementsByTagName("lat")[0].firstChild.nodeValue),
              parseFloat(markers[i].getElementsByTagName("lon")[0].firstChild.nodeValue));
          var info = markers[i].getElementsByTagName("info")[0].firstChild.nodeValue;
          var url = markers[i].getElementsByTagName("url")[0].firstChild.nodeValue;
		  if(markers[i].getElementsByTagName("url").length != 0){
		  	  var link = markers[i].getElementsByTagName("url")[0].firstChild.nodeValue;
          html = "<div class='infowindow'><a href='" + link + "' target='_blank'><b>" + name + "</b></a><br />" + info;
		  dispList = dispList + "<a href=javascript:changePlace("+ i +")>"+ (i+1) +"&nbsp;"+ name +"</a><br /></div>";
          }else{
          html = "<div class='infowindow'><b>" + name + "</b><br />" + info;
		  dispList = dispList + "<a href=javascript:changePlace("+ i +")>"+ (i+1) +"&nbsp;"+ name +"</a><br /></div>";
		  }
		  var flag = markers[i].getElementsByTagName("flag")[0].firstChild.nodeValue;
		  var icon;
          if(flag==1){icon = "http://gmaps-samples.googlecode.com/svn/trunk/markers/"+iconColor+"/marker" + (i+1) + ".png";
		  }else if(flag==2){icon = "http://gmaps-samples.googlecode.com/svn/trunk/markers/"+iconColor1+"/marker" + (i+1) + ".png";
		  }else{icon = "http://gmaps-samples.googlecode.com/svn/trunk/markers/"+iconColor+"/marker" + (i+1) + ".png";}
		  var shadowImg = "http://www.google.com/mapfiles/shadow50.png";
		  var shadowSize = new google.maps.Size(37, 34);
          var shadowPosition = new google.maps.Point(0, 0);
		  var shadowAnchor = new google.maps.Point(10, 34);
          var shadow = new google.maps.MarkerImage(shadowImg, shadowSize, shadowPosition, shadowAnchor);
          var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: icon,
            shadow: shadow
          });
          mapHtmls.push(html);
		  mapMarkers.push(marker);
		  bindInfoWindow(marker, map, infoWindow, html);
		  document.getElementById("map_right").innerHTML = dispList;
        }
      });
}

function changePlace(num) {
	var infowindowOptions = {
		content: mapHtmls[num]
	}
	var infowindow = new google.maps.InfoWindow(infowindowOptions);
		infowindow.open(map,mapMarkers[num]);
	setInfowindow(infowindow);
}

function setInfowindow(newInfowindow) {
	if (openInfowindow != undefined) {
	openInfowindow.close();
	}
	openInfowindow = newInfowindow;
}

function bindInfoWindow(marker, map, infoWindow, html) {
	google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(html);
    infoWindow.open(map, marker);
    });
}

function downloadUrl(url, callback) {
	var request = window.ActiveXObject ?
    new ActiveXObject('Microsoft.XMLHTTP') :
    new XMLHttpRequest;
	request.onreadystatechange = function() {
    if (request.readyState == 4) {
    	request.onreadystatechange = doNothing;
        callback(request.responseText, request.status);
	}
    };

    request.open('GET', url, true);
    request.send(null);
}

function parseXml(str) {
	if (window.ActiveXObject) {
    	var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
	} else if (window.DOMParser) {
        return (new DOMParser).parseFromString(str, 'text/xml');
    }
}

function doNothing() {}

if (!Array.prototype.forEach){
  Array.prototype.forEach = function(fun /*, thisp*/){
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++){
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

function clearMarker() {
    document.getElementById("map_right").innerHTML = null;
    mapMarkers.forEach(function(marker, idx) {
      marker.setMap(null);
    });
}

