//<![CDATA[

var map;
var inputmode_val=1; // 書き込みモードチェック用
var blue_icon;
var icons = [ ]; var default_icon;

//現在のスクリプトが置いてあるディレクトリURLを取得
function getCurrentDirectory(){
  currentURL = document.URL;
  splitURL = new Array();
  splitURL = currentURL.split("/");
  dirName = splitURL[0];
  for (i = 1; i < splitURL.length-1; i++){
	dirName += "/" + splitURL[i];
  }
  return dirName;
}

// カテゴリ選択フォームからcat_idを取得し、div id="category_post"にinputタグ追加
function getCategory(){
  var cat_id = document.SelectCat.cat_id.value;
    inputTag_str = '<input type=hidden method=get name="cat_id" value='+cat_id+'>';
  //  inputTag_str = "category_post. cat_id: "+cat_id+"<br>";
    document.getElementById("category_post").innerHTML = inputTag_str;
    //write cat_id into cookies
    currentURL = document.URL;
    splitURL = new Array();
    splitURL = currentURL.split("/");
    dirName = "/"+splitURL[3];
    if(splitURL.length>3) {
      for (i = 4; i < splitURL.length-3; i++){
	dirName += "/" + splitURL[i];
      }
    }
    //    document.getElementById("test_disp").innerHTML = "test|" + dirName;
    SetCookie("GB_catID",cat_id,"",dirName+"/");
}

// form_select_locationにて選択された緯度経度を取得して数値を返す
function getLocation(){
  var locate_str = document.SelectLocate.locate.value;
  array = new Array();
  array = locate_str.split("_");
  var selected_location = array[2]+'_'+array[3]+'_'+array[4]+'_'+array[5]+'_'+array[6]+'_'+array[7];
  //  document.getElementById("getloc_check").innerHTML = "test:"+selected_location;
  return selected_location;
}

// 書き込みフォームを表示
function addInputForm(point) {
	if (!inputmode_val){
		var lat = point.y;
		var lng = point.x;
		var width = document.button4addData.map_width.value;
		var inputform_str = '<form method="POST"><table style="width:'+width+'px" border="0" cellspacing="1" class="outer"><tr class="head"><th width="15%">緯度経度</th><td width="50%"><font color=green>' + point.y +', '+ point.x + '</font></td><td width="35%"><input type="button" name="submit" value="'+ document.initial.MSB_GOTO_EDIT.value + '" onClick="addDataWindow('+ lat + ', ' + lng +')"></td></tr></table></form>';
		document.getElementById("inputform").innerHTML = inputform_str;
	}
}
// データ追加ウィンドウをポップアップ
function addDataWindow(lat, lng) {
	var file_name = "./add_data.php";
	var locate_str = "?open_window=y&lat=" + lat + "&lng=" + lng +"&sel_cats";
	var target_uri = file_name + locate_str;
	adddatawin = window.open(target_uri, "add_data", "width=650,height=600,scrollbars=yes");
}
// 書き込みモード⇔閲覧モード
function changeInputMode(){
	if (!inputmode_val){
	  document.getElementById("inputform").innerHTML = "";
	  inputmode_str = document.initial.MSG_BROWSE_MODE.value; /* inputmode_val + */
	} else{
	  inputmode_str ='<font color=red>' + document.initial.MSG_CLICK_LOC.value + '</font><br>';
	}
	inputmode_val = 1 - inputmode_val; 
	document.getElementById("inputmode").innerHTML = inputmode_str;
}

function onLoad(chg_item) {

  map = new GMap2(document.getElementById("map"));
  set_icons(); // yn_webgisのアイコン
  category_menu();

  //Initial center and scale 
  var c_lat =0.0; var c_lng=0.0; var scale=10; var init_scale=10;
  var sw_lat; var sw_lng; var ne_lat; var ne_lng;
  //  var key2scale = document.initial; // カテゴリ(c)変化 or 地名選択(l)

  if(document.initial.lat) c_lat = parseFloat(document.initial.lat.value);
  if(document.initial.lng) c_lng = parseFloat(document.initial.lng.value);
  if(document.initial.map_scale) init_scale = parseInt(document.initial.map_scale.value);

  scale = init_scale;
 //地名選択関数の中にformで指定した変数を取得
  var selected_location = document.SelectLocate.locate.value;
  
  array = new Array();
  array = selected_location.split("_");
  var location_rank = array[1];
  //document.getElementById("test_disp").innerHTML= "parms="+location_rank+"!"+scale;
  if(!isNaN(array[2]) && !isNaN(array[3])) {
    c_lat = parseFloat(array[2]);
    c_lng =parseFloat( array[3]);
    sw_lat = parseFloat(array[4]);
    sw_lng =parseFloat( array[5]);
    ne_lat = parseFloat(array[6]);
    ne_lng =parseFloat( array[7]);
    if(!isNaN(sw_lat) && !isNaN(sw_lng) && !isNaN(ne_lat) && !isNaN(ne_lng)){
      if(sw_lat==ne_lat && sw_lng==ne_lng) {
	scale=17;
      } else 
	scale = map.getBoundsZoomLevel(new
				     GLatLngBounds(new GLatLng(sw_lat,sw_lng),
						   new GLatLng(ne_lat,ne_lng))
				     );
    } else if(location_rank>0) {
      scale = 8 + 3*parseInt(location_rank);
    }
  }

  if(chg_item=="GC") {// Selected by GeoCoding
    c_lat = parseFloat(GetCookie('lat'));
    c_lng = parseFloat(GetCookie('lng'));
    scale = parseInt(GetCookie('scale'));
  }

  map.setCenter(new GLatLng(c_lat,c_lng),scale); //初期設定
  map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  map.addControl(new GOverviewMapControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(40,40)));
  map.enableGoogleBar();
  map.addMapType(G_PHYSICAL_MAP) ; 
  
  var request = GXmlHttp.create();
  var opt_str = '?cat_id=';
  opt_str += GetCookie("GB_catID"); // document.SelectCat.cat_id.value;
  if (GetCookie('GB_catID') != null){ // nullならアイコンを表示しない
    request.open("GET", "data4g_maps_xml.php"+opt_str, true); //xmlデータファイルダウンロード
    
    request.onreadystatechange = function() {
      //      var c_lat =0.0; var c_lng=0.0; var scale=10;
      sw_lat = 90.0; sw_lng=180; ne_lat=-90.0; ne_lng=-180.0;
      markArray = new Array();
      if (request.readyState == 4) {
	var xmlDoc = request.responseXML;
	var markers = xmlDoc.documentElement.getElementsByTagName("marker");
	sw_lat = parseFloat(c_lat);  sw_lng = parseFloat(c_lng);
	ne_lat= parseFloat(c_lat);  ne_lng=parseFloat(c_lng);
	//      document.getElementById("test_disp").innerHTML= "parms=" + c_lat +"|"+c_lng+"|"+scale+"|"+ "sw_lng="+sw_lng+"ne_lng"+ne_lng;

	for (var i = 0; i < markers.length; i++) {
	  var lat = parseFloat(markers[i].getAttribute("lat"));
	  var lng = parseFloat(markers[i].getAttribute("lng"));
	  var point = new GLatLng(lat,lng);

	  if(lat < sw_lat) {
	    sw_lat = lat;
	  } if(lat > ne_lat) {
	    ne_lat = lat;
	  }
	  if(lng < sw_lng) {
	    sw_lng = lng;
	  } if(lng > ne_lng) {
	    ne_lng = lng;
	  }
	  URL = markers[i].getAttribute("url") +
	    '?con_id=' +  markers[i].getAttribute("conid");
	  //	    + '&u_id=' + markers[i].getAttribute("uid");
	  var title = markers[i].getAttribute("title");
	  var icon_id = parseInt(markers[i].getAttribute("icon_id"));
	  if(icons[icon_id]) { blue_icon = icons[icon_id]} else blue_icon=default_icon;
	  markArray.push(new GMarker(point, blue_icon));
	  map.addOverlay(markArray[i]);
	  updateMarker(markArray[i],URL,title);
	}

	//set center and zoom by marker positions
	if(sw_lat!=ne_lat) c_lat = (sw_lat+ne_lat)/2.0;
	if(sw_lng!=ne_lng) c_lng = (sw_lng+ne_lng)/2.0;
	if(sw_lat!=ne_lat || sw_lng!=ne_lng)
	  scale = map.getBoundsZoomLevel(new
					 GLatLngBounds(new GLatLng(sw_lat,sw_lng),
						       new GLatLng(ne_lat,ne_lng))
					 );
	if(c_lat == null || isNaN(c_lat) || Math.abs(c_lat)>90)
	  c_lat = parseFloat(document.initial.lat.value);
	if(c_lng == null || isNaN(c_lng) || Math.abs(c_lng)>180)
	  c_lng = parseFloat(document.initial.lng.value);

	var map_type = map.getCurrentMapType();
	if(scale == null || isNaN(scale)) {scale = 10;}
	else if(scale <map_type.getMinimumResolution()) {scale = map_type.getMinimumResolution();}
	else if(scale > map_type.getMaximumResolution()){scale = map_type.getMaximumResolution();}
	if(chg_item=="c") map.setCenter(new GLatLng(c_lat,c_lng),parseInt(scale)); // If a new location is selected (l), do nothing.
      }
    }

    request.send(null);
  }
  var new_marker; var marker_selected = false;
  GEvent.addListener(map,"click",function(overlay, point) {
    if (point && inputmode_val == 0){
      if(marker_selected) {
	map.removeOverlay(new_marker);
      }
      new_marker =new GMarker(point,{icon:icon4new});
      map.addOverlay(new_marker);
      addInputForm(point);
      marker_selected = true;
    } else if(new_marker && inputmode_val == 0) {
      map.removeOverlay(new_marker);
      marker_selected = false;
    }
  });
  // 書き込み位置のアイコンをドラッグにより変更できないか?
  //      GEvent.addListener(new_marker,"dragend",function() {
  //	if (marker){
  //	  map.addOverlay(new GMarker(point,{draggable:true, icon:default_icon}));
  //	  addInputForm(new_marker.getPoint());
  //	}
  //      });
}

function updateMarker(marker,URL,title) {
  if(parseInt(document.initial.trigger_infoWin.value)==1) {
  // マウスクリックによる表示
    GEvent.addListener(marker, "click", function() {
	var str = "<H3>" + title +"</H3><form><input type='button' value='記事表示' onClick='display_article(\"" + URL + "\")'></form> <br>記事表示だけなら\"+\"ボタンで";
	//      marker.openInfoWindowHtml(str);
	var maxContentDiv = document.createElement('div');
	maxContentDiv.innerHTML = 'Loading...'
          marker.openInfoWindowHtml(str, {maxContent: maxContentDiv, maxTitle: "コメント表示やコメント投稿にはウィンドウを閉じて「記事表示」ボタンを"});
	
	var iw = map.getInfoWindow();
	GEvent.addListener(iw, "maximizeclick", function() {
            GDownloadUrl(URL, function(data) {
		maxContentDiv.innerHTML = data;
	      });
	  });
      });
  } else {
  //マウスオーバーでタイトル、リンク表示
    GEvent.addListener(marker, "mouseover", function() {
      var str = title +"<br>" +"<form><input type='button' value='記事表示' onClick='display_article(\"" + URL + "\")'></form>";
      marker.openInfoWindowHtml(str);
    });
  }
}

function display_article(URL) {
  if(document.initial.display_type.value) {
    var disp_type = document.initial.display_type.value;
  } else {
    var disp_type = "0";
  }
  if(parseInt(disp_type)==1) {
    // 新しいウィンドウを開いてそこに記事を表示
    NewWin=window.open(URL + '&open_table=no&ll=1','','scrollbars=yes, resizable=yes, width=600,height=400');
  } else {
    // iframeに記事を表示する (divタグではIDを指定してもうまくいかない)
    document.getElementById("g_message").src = URL+'&open_table=no';
  }
}


function set_icons() { // yn_webgisのアイコン
  // 各カテゴリに付与されているアイコンのURLを取得
  var request = false;
  // IE以外
  if(window.XMLHttpRequest) {
    　　　request = new XMLHttpRequest();
    // IE用
  } else if(window.ActiveXObject) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }

  request.open("GET", "categoryXml.php?req=icons", true); //
  request.onreadystatechange = function() {
     if (request.readyState == 4) {
       var xmlDoc = request.responseXML;
       var markers = xmlDoc.documentElement.getElementsByTagName("icon");
       var Id;
       for (var i = 0; i < markers.length; i++) {
	 Id = markers[i].getAttribute("id");
	 //    document.getElementById("test_disp").innerHTML += 'icon=' + Id;
  	icons[Id] = new GIcon();
  	icons[Id].image =  markers[i].getAttribute("url");
	if(markers[i].getAttribute("shadow_url") !="") {
	  icons[Id].shadow =  markers[i].getAttribute("shadow");
	}
       icons[Id].iconSize = new GSize(parseInt(markers[i].getAttribute("size_x")), parseInt(markers[i].getAttribute("size_y")));
       icons[Id].shadowSize = new GSize(parseInt(markers[i].getAttribute("shadow_size_x")), parseInt(markers[i].getAttribute("shadow_size_y")));
  	icons[Id].iconAnchor =  new GPoint(parseInt(markers[i].getAttribute("anchor_x")), parseInt(markers[i].getAttribute("anchor_y")));
  	icons[Id].infoWindowAnchor =  new GPoint(parseInt(markers[i].getAttribute("wanchor_x")), parseInt(markers[i].getAttribute("wanchor_y")));
  	
       }
       default_icon = new GIcon();
       default_icon.image = "http://www.google.com/mapfiles/marker.png";
       default_icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
       default_icon.iconSize = new GSize(20,34);
       default_icon.shadowSize = new GSize(37,34);
       default_icon.iconAnchor = new GPoint(10,34);
       default_icon.infoWindowAnchor = new GPoint(15,1);

       icon4new = new GIcon();
       icon4new.image = "icons/markerN_blue.png";
       icon4new.shadow = "http://www.google.com/mapfiles/shadow50.png";
       icon4new.iconSize = new GSize(20,34);
       icon4new.shadowSize = new GSize(37,34);
       icon4new.iconAnchor = new GPoint(10,34);
       icon4new.infoWindowAnchor = new GPoint(15,1);
     }
  }
    request.send(null);
}

function init_map(arg1){
  document.getElementById("map").innerHTML = "";
  onLoad(arg1);
}
function locationChange(){
  var selected_location = getLocation();
  array = new Array();
  array = selected_location.split("_");
  
  var sw_lat = parseFloat(array[2]);
  var sw_lng =parseFloat( array[3]);
  var ne_lat = parseFloat(array[4]);
  var ne_lng =parseFloat( array[5]);
  if(!isNaN(sw_lat) && !isNaN(sw_lng) && !isNaN(ne_lat) && !isNaN(ne_lng)) {
    var scale=17;
    if(sw_lat!=ne_lat && sw_lng!=ne_lng) {
      scale = map.getBoundsZoomLevel(new
				     GLatLngBounds(new GLatLng(sw_lat,sw_lng),
						   new GLatLng(ne_lat,ne_lng))
				     );
    }
    map.setZoom(scale);
  }
  map.panTo(new GLatLng(array[0],array[1]),1000);

}

function check_selected_location(form) {

  var obj = form.elements['locate'].value;
  var array = obj.split("_");  
  if(array[0] == 0) {
    alert("プルダウンメニューから地名を選択してください。\n Select a place name from the pull-down menu.");
    return false;
  } else {
    return true;
  }
}

///////menu to select category
function category_menu() {
  var request = GXmlHttp.create();
  request.open("GET", "categoryXml.php", true); //
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      document.getElementById('category_menu').innerHTML = '<form name="selectCat">'
      var xmlDoc = request.responseXML;
      var c = xmlDoc.documentElement.getElementsByTagName("category");
      var selectedCat = GetCookie("GB_catID");
      d = new dTree('d','./');
      d.config.useIcons = false;
      d.config.folderLinks = false;
      d.add(0,-1,document.SelectCat.RootCatName.value);
      for (var i = 0; i < c.length; i++) {  
	cat_id =parseInt(c[i].getAttribute('cat_id'));
	button_str = '<input type="radio" name="selCat" value="' + cat_id +'" onClick="selectCategory(this)"';
	if(selectedCat == cat_id) button_str += ' checked ';
	button_str += '>'+ c[i].getAttribute('cat_name') + '(' + c[i].getAttribute('nc') + ')';
	d.add(cat_id,parseInt(c[i].getAttribute('pid')),button_str);
	//	d.add(cat_id,parseInt(c[i].getAttribute('pid')),c[i].getAttribute('cat_name'), 'index.php?cat_id='+cat_id+'&pri=c');
      }
      document.getElementById('category_menu').innerHTML += d;
      document.getElementById('category_menu').innerHTML += "</form>";
    }
  }
    request.send(null);
}
function selectCategory(catObj) {
  var cat = catObj.value;
  var lat = parseFloat(map.getCenter().lat()); 
  var lng = parseFloat(map.getCenter().lng());
  SetCookie("GB_catID",cat);
  SetCookie("lat",lat);
  SetCookie("lng",lng);
  SetCookie("scale",map.getZoom());
  map.clearOverlays();
  onLoad('c');
}

function moveByGeocoder() {
  var address = document.input_addr.place_str.value;
  var geocoder = new GClientGeocoder();
  geocoder.getLatLng(address,
		     function(point) {
		         SetCookie("lat",point.lat());
			 SetCookie("lng",point.lng());
			 SetCookie("scale",map.getZoom());
			 onLoad('GC');
		     }
		     );
}
function chgMapSize(wh, chg) {
  if(wh=="w") {
    if(chg=="+") {
      document.getElementById("map").style.width = parseInt(document.getElementById("map").style.width)*1.2 + "px";
    } else if(chg=="-") {
      document.getElementById("map").style.width = parseInt(document.getElementById("map").style.width)*0.8 + "px";
    }
  } else if(wh=="h") {
    if(chg=="+") {
      document.getElementById("map").style.height = parseInt(document.getElementById("map").style.height)*1.2 + "px";
    } else if(chg=="-") {
      document.getElementById("map").style.height = parseInt(document.getElementById("map").style.height)*0.8 + "px";
    }
  }
}


//]]>

