    var map;



function initMap(){
	map.clearOverlays();
	gmarkers = [];
	htmls = [];
	i = 0;
}

	//BuzzXML用
	var dataMap = new Object();
	var categoryMap  = new Object();
	var twittMap = new Object();
	var twittLinkMap = new Object();
	

	//areaControll クラスのコンストラクタ
	function areaControll() {}
	//GControl クラスを継承する
	areaControll.prototype = new GControl();
	//コントロールが地図に追加されたときに呼び出される
	//主に初期化のために用いられる
	areaControll.prototype.initialize = function(map) {
		
		var container = document.createElement("div");

		//コンテナDiv を返す
		return container;
	}
	
	//位置が指定されなかったとき、コントロールの位置を決めます
	areaControll.prototype.getDefaultPosition = function() {
		return new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10, 20));
	}



	//listControll クラスのコンストラクタ
	function listControll() {}
	//GControl クラスを継承する
	listControll.prototype = new GControl();
	//コントロールが地図に追加されたときに呼び出される
	//主に初期化のために用いられる
	listControll.prototype.initialize = function(map) {
		var container = document.createElement("div");
		container.setAttribute("id","listControll");
		
		var listBox = document.createElement("div")		
		listBox.setAttribute("id","side_bar");
		container.appendChild(listBox);
		
		//コンテナを地図上に追加
		map.getContainer().appendChild(container);
		//コンテナDiv を返す
		return container;
	}
	//位置が指定されなかったとき、コントロールの位置を決めます
	listControll.prototype.getDefaultPosition = function() {
		return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(0, 0));
	}






    
    if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 40));
		map.addControl(new GLargeMapControl(),pos); // large を Small に変更可
		pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 5));
		map.addControl(new GMapTypeControl(),pos);
		map.setCenter(new GLatLng(35.64825, 139.71518), 15);
		
		//自作ボタンの追加
		//map.addControl(new areaControll() );
		map.addControl(new listControll() );

		var tilelayer = new GTileLayer(new GCopyrightCollection(), 0, 17);
		tilelayer.getTileUrl = function() {return "/topics/img/filter.png";};
		map.addOverlay(new GTileLayerOverlay(tilelayer));
		GEvent.addListener(map, "moveend", function() {pointVisibleChange();});

    }
    
    function moveMap(lat,lon){
		map.panTo(new GLatLng(lat, lon), 14);
		//pointVisibleChange();
	}
    function createMarker(point, label, html, markerIcon) {
	  var opts ={icon:markerIcon}
      var marker = new GMarker(point, opts);
      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
    
    function createside_barEntry(marker, label, contentID) {
      var div = document.createElement("div");
      var html = '' + label + '';
      div.innerHTML = html;
      div.style.cursor = "pointer";
      div.style.marginBottom = "4px";
      div.style.padding = "4px";
	  div.setAttribute("id","pID"+contentID);	//表示非表示のトリガにするためのID
      GEvent.addDomListener(div, "click", function() {
        GEvent.trigger(marker, "click");
      });
      GEvent.addDomListener(div, "mouseover", function() {
        div.style.backgroundColor = "#eaeaea"; // ポインタが乗ったときサイドバー項目の色指定
      });
      GEvent.addDomListener(div, "mouseout", function() {
        div.style.backgroundColor = "#fff";
      });
      return div;
    }
    
    


	
    GDownloadUrl(prmFeedXML, function(data, responseCode) { // XMLファイルの名称・場所
    
    if(responseCode == 200) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("item");
      var side_bar = document.getElementById("side_bar");
      side_bar.innerHTML = "";

		for (var i = 0; i < markers.length; i++) {

			//var pointerType = markers[i].getElementsByTagName("group_category")[0].firstChild.nodeValue;
			var iconCommon = new GIcon();
			iconCommon.shadow = "/img/pointer_shadow.png";
			iconCommon.iconSize = new GSize(42, 58);
			iconCommon.shadowSize = new GSize(34, 30);
			iconCommon.iconAnchor = new GPoint(21, 58);
			iconCommon.infoWindowAnchor = new GPoint(21, 58);
			var icon = new GIcon(iconCommon,"/img/pointer.png");


			var lat;
			var lng;
			
			lat = GXml.value( (markers[i].getElementsByTagName("lat"))[0]  );
			lng = GXml.value( (markers[i].getElementsByTagName("long"))[0]  );

			if (!lat){	//ChromeとFFとでエレメントの取り方が違う
				if ( markers[i].getElementsByTagName("geo:lat")[0]!=null){
					if(  markers[i].getElementsByTagName("geo:lat")[0].firstChild != null){
						if(  markers[i].getElementsByTagName("geo:lat")[0].firstChild.nodeValue != null){
						    lat =  markers[i].getElementsByTagName("geo:lat")[0].firstChild.nodeValue ;
						    lng =  markers[i].getElementsByTagName("geo:long")[0].firstChild.nodeValue ;
					    }else{
							continue;
						}
				    }else{
						continue;
					}
			    }else{
					continue;
				}
			}
			var contentID = markers[i].getElementsByTagName("contentID")[0].firstChild.nodeValue;
			var contentType = markers[i].getElementsByTagName("contentType")[0].firstChild.nodeValue;

			var group_description = "";
			if(markers[i].getElementsByTagName("group_description")[0].firstChild!=null){
				group_description = markers[i].getElementsByTagName("group_description")[0].firstChild.nodeValue;
			}
			var group_category = "";
			if(markers[i].getElementsByTagName("group_category")[0].firstChild!=null){
				group_category = markers[i].getElementsByTagName("group_category")[0].firstChild.nodeValue;
			}
			var information = "";
			if(markers[i].getElementsByTagName("information")[0].firstChild!=null){
				information = markers[i].getElementsByTagName("information")[0].firstChild.nodeValue;
			}
			var spacial_description = "";
			if(markers[i].getElementsByTagName("spacial_description")[0].firstChild!=null){
				spacial_description = markers[i].getElementsByTagName("spacial_description")[0].firstChild.nodeValue;
			}
			var group_tag = "";
			if(markers[i].getElementsByTagName("group_tag")[0].firstChild!=null){
				group_tag = markers[i].getElementsByTagName("group_tag")[0].firstChild.nodeValue;
			}
			var className = "";
/*			if (group_tag.indexOf('ebiben2010')>-1 ){
				icon = new GIcon(iconCommon,"/img/mapIconEbiben.png");
				className="ebiben2010";
			}else */
			if (group_tag.indexOf('ギャラリー')>-1 && contentType.indexOf('shop')<1 && contentType.indexOf('restaurant')<1 ){
				icon = new GIcon(iconCommon,"/img/mapIconGallery.png");
				className="gallery";
			}else if (group_tag.indexOf('美術館')>-1 && contentType.indexOf('shop')<1  && contentType.indexOf('restaurant')<1){
				icon = new GIcon(iconCommon,"/img/mapIconMuseum.png");
				className="museum";
			}else if (group_tag.indexOf('公園')>-1 && contentType.indexOf('shop')<1  && contentType.indexOf('restaurant')<1){
				icon = new GIcon(iconCommon,"/img/mapIconPark.png");
				className="park";
			}else if (contentType.indexOf('restaurant')>-1){
				icon = new GIcon(iconCommon,"/img/mapIconRestaurant.png");
				className="restaurant";
			}else if (contentType.indexOf('shop')>-1){
				icon = new GIcon(iconCommon,"/img/mapIconShop.png");
				className="shop";
			}else if (contentType.indexOf('service')>-1){
				icon = new GIcon(iconCommon,"/img/mapIconService.png");
				className="service";
			}else if (contentType.indexOf('facility')>-1){
				icon = new GIcon(iconCommon,"/img/mapIconService.png");
				className="service";
			}

			var feature_tag = "";
			if(markers[i].getElementsByTagName("feature_tag")[0].firstChild!=null){
				feature_tag = markers[i].getElementsByTagName("feature_tag")[0].firstChild.nodeValue;
			}
			

			//暫定
			if (className==""){
				icon = new GIcon(iconCommon,"/img/mapIconEbiben.png");
				className="ebiben2010";
			}
			
			/*
			if (feature_tag.indexOf('ARMusic')>-1 ){
				icon = new GIcon(iconCommon,"/img/arMapIconMusic.png");
				className="ARMusic";
			}else if (feature_tag.indexOf('ARMovie')>-1){
				icon = new GIcon(iconCommon,"/img/arMapIcoMovie.png");
				className="ARMovie";
			}else if (feature_tag.indexOf('ARText')>-1){
				icon = new GIcon(iconCommon,"/img/arMapIcoText.png");
				className="ARText";
			}else if (feature_tag.indexOf('ARBench')>-1){
				icon = new GIcon(iconCommon,"/img/arMapIcoBench.png");
				className="ARBench";
			}else if (feature_tag.indexOf('ARAd')>-1){
				icon = new GIcon(iconCommon,"/img/arMapIcoAd.png");
				className="ARAd";
			}else if (feature_tag.indexOf('ARPerformance')>-1){
				icon = new GIcon(iconCommon,"/img/arMapIcoPerformance.png");
				className="ARPerformance";
			}else if (feature_tag.indexOf('ARPhoto')>-1){
				icon = new GIcon(iconCommon,"/img/arMapIcoPhoto.png");
				className="ARPhoto";
			}*/			



			var catchCopy = "";
			if(markers[i].getElementsByTagName("catchCopy")[0].firstChild!=null){
				catchCopy = markers[i].getElementsByTagName("catchCopy")[0].firstChild.nodeValue;
			}
			
			var image = '/img/ebisu_144.png';
			if(markers[i].getElementsByTagName("imagePath_a")[0].firstChild){
				image = markers[i].getElementsByTagName("imagePath_a")[0].firstChild.nodeValue;
			}
			var point = new GLatLng(parseFloat(lat), parseFloat(lng) , marker);
			var link = markers[i].getElementsByTagName("link")[0].firstChild.nodeValue;
			var label = markers[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			if(group_description){
			label = "<p class='"+ className +"' >" + label + "（" +group_description +"）</p>";
			}else{
			label = "<p class='"+ className +"' >" + label + "</p>";
			}
			
			var html = "<a href='"+ link +"' >" ;
			html = html + "<h3 class='"+className+"' >" + markers[i].getElementsByTagName("title")[0].firstChild.nodeValue + "</h3>";
			if (image != "/c2msuploaded/"){
				html = html+ "<img src='"+ image + "' class='thumbnail right' style='width:75px;'></a>";
			}
			html = html + "<p class='category'>" + group_description + "</p>";
			html = html + "<p class='catchCopy'>" + catchCopy + "</p>";
			html = html + "</a>";
			html = html + "<p class='information'>" + information + "</p>";
			html = html + "<p class='spacial'>" + spacial_description + "</p>";
			var marker = createMarker(point, label, html , icon);

			map.addOverlay(marker);
			var side_barEntry = createside_barEntry(marker, label, contentID);
			side_bar.appendChild(side_barEntry);
			
			
			//buzzXMLに表示するための仕組み(配列に施設情報をいれておく）
			var elementMap = new Object();
			elementMap["image"] = image;
			elementMap["title"] = label;
			elementMap["link"] = link;
			elementMap["lat"] = lat;
			elementMap["lng"] = lng;
			elementMap["contentID"] = contentID;
			elementMap["group_category"] = group_category;
			elementMap["catchCopy"] = catchCopy;
			dataMap[link] = elementMap;
			
			if(categoryMap[group_category]){
				var ar = new Array(); 
				ar = categoryMap[group_category];
				ar.push(link);
				categoryMap[group_category] = ar;
			}else{
				var ar = new Array(); 
				ar.push(link);
				categoryMap[group_category] = ar;
			}
			//alert(categoryMap[group_category]);

		}
      
		//Buzz用のXMLを読み込む
		//google.setOnLoadCallback(initialize);
		//pointVisibleChange();


	    } else if(responseCode == -1) {
	       alert("タイムアウトしました。後ほど再試行してください。");
	    } else { 
	       alert("エラーです。XMLファイルを確認してください。");
	    }
    
    });




    function showList(){
		var html="";

		for (var k in categoryMap){		//該当カテゴリの数分作業
			//alert(k);	//key
			html += "<h2>"+k+"</h2>";
			var categoryLinkArr = categoryMap[k];	//該当カテゴリ含まれる施設のリンク配列
			
			for (var key in twittLinkMap){			//twitterの順番保持マップでループ
				var url = key;
				if ( (categoryLinkArr.toString()).indexOf(url)>-1 ){
					var hashMap = dataMap[url];
					html += "<div class=\"cbox\">";		//施設情報HTMLの作成（前半）
					html += "<h3 class=\"title\">"+hashMap["title"]+"</h3>";
					if (hashMap["image"]!="/c2msuploaded/"){
						html = html+ "<img src='"+map["image"] + "' class='thumbnail'></a>";
					}
					//twitterの数分出す
					var mapArr = twittMap[url];	//twitterの内容保持マップから内容配列を取得
					//alert(mapArr);
					for (i=0;i<mapArr.length;i++){		//該当URLに関するtwittの個数分loop
						var mapElement =mapArr[i];
						html = html+ "<div class=\"twittBox\">";
						//html = html+ mapArr["title"];
						html = html+ "<p class=\"twitt\">"+mapElement["desc"]+"</p>";
						html = html+ "<p class=\"pubDate\">"+mapElement["pubData"]+"</p>";
						html = html+ "</div>";
					}
					html = html+ "</div>";
					html = html+ "<hr />";
				}
				html = html+ "<hr />";
			}

		}
		//alert(document.getElementById("mainList"));
		if (document.getElementById("mainList")){
			document.getElementById("mainList").innerHTML = html;
		}
	}



    function pointVisibleChange(){
		 var bnd = map.getBounds();
		 var mapNE_lat = bnd.getNorthEast().lat();
		 var mapNE_lng = bnd.getNorthEast().lng();
		 var mapSW_lat = bnd.getSouthWest().lat();
		 var mapSW_lng = bnd.getSouthWest().lng();
		for (var k in dataMap){
			var hashMap = dataMap[k];
			var lat = hashMap["lat"];
			var lng = hashMap["lng"];
			//alert("lat:"+lat+"]["+mapNE_lat+"]["+mapSW_lat+"] lng:"+lng+"]["+mapNE_lng+"]["+mapSW_lng+"]");
			if ( (lat <= mapNE_lat && lat >= mapSW_lat) && (lng >= mapSW_lng && lng <= mapNE_lng) ){
				//地図の範囲内である
				//alert("pID"+hashMap["contentID"]);
				document.getElementById("pID"+hashMap["contentID"]).style.visible="true";
				document.getElementById("pID"+hashMap["contentID"]).style.display="block";
				//alert("in");
			}else{
				//地図の範囲からはずれる
				document.getElementById("pID"+hashMap["contentID"]).style.visible="false";
				document.getElementById("pID"+hashMap["contentID"]).style.display="none";
				//alert("out");
			}
		}
		bnd =null;
	}


    function getHashTag(desc){
		//var RegularExp = new RegExp( desc, (^|[] !""$%&'()*+,-.:;<=>?@[\^`{|}~])#([^] !""#$%&'()*+,-.:;<=>?@[\^`{|}~\r\n]+));
		var hashTag=desc.match( /\s*\#[a-zA-Z0-9]*[\s\r]*/g );
		return hashTag;
	}

    function getUrl(desc){
		var url=desc.match( /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/g );
		return url;
	}

    function getAdditionalContent(desc,title,pubData){
		var html="";
		var urlArr = getUrl(desc);		//TwitterコメントからURLを取得（配列）
		if(urlArr){	//URL配列が存在するとき
			for (i=0;i<urlArr.length;i++){
				urlValue = urlArr[i];
				if(dataMap[urlValue]!=null){	//該当URLが施設XMLに存在した
				
					var vMap = dataMap[urlValue];
					html = html+ "<div class='subInfo'>";
					html = html+ "<a href='"+ vMap["link"] +"'><h4>";
					html = html+ vMap["title"] + "</h4>";
					if (map["image"]!="/c2msuploaded/"){
						html = html+ "<img src='"+vMap["image"] + "' class='thumbnail'></a>";
					}
					html = html+ "</div>";
					
					//ソートされたリスト用にキーとなるURLをマップに保存（配列にしないのは重複避けるため）
					if (twittMap[urlValue]==null){
						var arr = new Array();
						var tMap= new Object();
						tMap["title"]=title;
						tMap["desc"]=desc;
						tMap["pubData"]=pubData;
						arr.push(tMap);
						twittMap[urlValue]=arr;		//発言の内容
						twittLinkMap[urlValue]=i;	//発言の順番保持用
					}else{
						var tMap= new Object();
						tMap["title"]=title;
						tMap["desc"]=desc;
						tMap["pubData"]=pubData;
						var arr = new Array();
						arr = twittMap[urlValue];
						arr.push(tMap); 
						twittMap[urlValue]=arr;
					}
					
				}
				//alert(urlValue);
			}
		}
		
		return html;

	}


function downloadData(){
  GDownloadUrl(prmFeedXML, function dispData(data, statusCode){
    alert(data);
  });
}



