﻿var marker;
var citykml;
var meshkml;
var serverurl="http://bluelist.ies.hro.or.jp/db/bunpu/";

function showLatLng(address) {
if (geocoder) {
  geocoder.getLatLng(address,function(point) {
    if (!point) {
      alert(address + "が見つかりません");
    } else {
      map.setCenter(point, 13);
    }
  });
  }  
} 


function clearPolygon(){
	for(i=0;i<markers.length;i++){
		map.removeOverlay(markers[i]);
	}
	map.removeOverlay(KRect);
	markers =[];
}

/** 市町村ポリゴンKMLデータをオーバーレイする */
function draw_city(bform){
  var obj = bform.city;
  if(obj.checked){
    map.addOverlay(citykml);
  } else {
    map.removeOverlay(citykml);
  }
}

/** メッシュポリゴンKMLデータをオーバーレイする */
function draw_mesh(bform){
  var obj = bform.mesh;
  if(obj.checked){
    map.addOverlay(meshkml);
  } else {
    map.removeOverlay(meshkml);
  }
}


/** 年別メッシュポリゴンKMLデータをオーバーレイする */
function draw_nmesh(id){
  var obj = document.getElementsByName(id);
  if(obj[0].checked){
    if(geoObj[id]){
      map.addOverlay(geoObj[id]);
    } else {
      kmldata = nmeshkml[id];
      geoxml = new GGeoXml(kmldata,function(){
        if(geoxml.loadedCorrectly()){
          geoObj[id]= geoxml;
          map.addOverlay(geoObj[id]);
        } else {
        }
      }); 
    } 
  } else {
    if(geoObj[id]){
      map.removeOverlay(geoObj[id]);
    } else {
    }
  }
}


function loadCityKML(kindcd,spcd,isOverlay){
  var filename=serverurl+"/city/"+kindcd+"/"+spcd+".kml";
  citykml = new GGeoXml(filename);
  if(isOverlay) map.addOverlay(citykml);
}

function loadMeshKML(kindcd,spcd,isOverlay){
  var filename=serverurl+"/5km/"+kindcd+"/"+spcd+".kml";
  meshkml = new GGeoXml(filename);
  if(isOverlay) map.addOverlay(meshkml);
}

function loadNMeshKML(kindcd,spcd,id){
  var filename="";
  if(id=="all"){
    filename=serverurl+"/nen/"+spcd+"_"+"all.kml";
    geoxml = new GGeoXml(filename,function(){
      if(geoxml.loadedCorrectly()){
        geoObj[id]= geoxml;
        map.addOverlay(geoObj[id]);
      } else {
      }
    });
  } else {
    filename=serverurl+"/nen/"+spcd+"_"+id+".kml";
    nmeshkml[id]=filename;
  }
}

/** クリック地点ポイントデータからポリゴンを描画する */
function draw_polygon(point)
{
  if(marker) map.removeOverlay(marker);
  var marker = new GMarker(point);
  map.addOverlay(marker);
  var lat1 = point.lat();
  var lng1 = point.lng();
  // 世界測地→東京測地に変換
  var tklat = eval(lat1 + lat1* 0.00010696 - lng1* 0.000017467 - 0.0046020);
  var tklng = eval(lng1 + lat1* 0.000046047+ lng1* 0.000083049 - 0.010041);
  var m1xx = parseInt(tklng-100);
  var m1yy = parseInt(1.5*tklat);
  var m2xx = Math.floor((tklng-parseInt(tklng))*8);
  var m2yy = Math.floor((tklat-m1yy*2/3)*60/5);
  var m2cd = m1yy+""+m1xx+""+m2yy+""+m2xx;

  // 2次メッシュコード(tokyo)
  m2cdw = parseFloat(m1xx+100+m2xx/8);
  m2cde = parseFloat(m1xx+100+(m2xx+1)/8);
  m2cds = m1yy*2/3+m2yy*5/60;
  m2cdn = m1yy*2/3+(m2yy+1)*5/60;
  
  //NW
  m2cdn_wgs = m2cdn - 0.00010695*m2cdn + 0.000017464*m2cdw + 0.0046017;
  m2cdw_wgs = m2cdw - 0.000046038*m2cdn - 0.000083043*m2cdw + 0.010040;
  //SE
  m2cds_wgs = m2cds - 0.00010695*m2cds + 0.000017464*m2cde + 0.0046017;
  m2cde_wgs = m2cde - 0.000046038*m2cds - 0.000083043*m2cde + 0.010040;

  m5x= Math.ceil((tklng-m2cdw)*16);
  m5y= Math.ceil((tklat-m2cds)*16*1.5);
  var m5xy="";
  if(m5y==2){
    m5xy = parseInt(m5x+2);
  } else {
    m5xy = parseInt(m5x+m5y-1);
  }
  var m5cd = m2cd+""+m5xy;

  //
  m5cdw_wgs="";
  m5cde_wgs="";
  m5cdn_wgs="";
  m5cds_wgs="";
   
  if(m5x==1){
    m5cdw_wgs= m2cdw_wgs;
    m5cde_wgs= (m2cdw_wgs+m2cde_wgs)/2;
  } else {
    m5cdw_wgs= (m2cdw_wgs+m2cde_wgs)/2;
    m5cde_wgs= m2cde_wgs;
  }
  if(m5y==1){
    m5cds_wgs= m2cds_wgs;
    m5cdn_wgs= (m2cds_wgs+m2cdn_wgs)/2;
  } else {
    m5cds_wgs= (m2cds_wgs+m2cdn_wgs)/2;
    m5cdn_wgs= m2cdn_wgs;
  }

  var searchObj  = document.searchmesh;
  var searchType = searchObj.type;
  for(var i=0;i<searchType.length;i++){
    if(searchType[i].value=="m2" && searchType[i].checked){
      // 2次メッシュを登録
      var m2list = searchObj.elements['m2[]'];
      var hasList =-1;
      if(m2mesh.length>0){
        if(!m2mesh.indexOf){ // for IE
		  for(j=0;j<m2mesh.length;j++){
			if(m2mesh[j]==m2cd){
				hasList=1;
				break;
			}		  
		  }
        } else {
          hasList = m2mesh.indexOf(m2cd);        
        }        
      } else {
        hasList=-1;
      }
      if(hasList<0){
        for(var j=0;j<m2list.length;j++ ){        
          str =m2list[j].value;
          str = str.replace(/^[ ]+|[ ]+$/g, '');
          if(str==""){          
            m2list[j].value=m2cd;
            var CPoints=[];
            CPoints.push(new GLatLng(m2cds_wgs,m2cdw_wgs));
            CPoints.push(new GLatLng(m2cdn_wgs,m2cdw_wgs));
            CPoints.push(new GLatLng(m2cdn_wgs,m2cde_wgs));
            CPoints.push(new GLatLng(m2cds_wgs,m2cde_wgs));
            CPoints.push(new GLatLng(m2cds_wgs,m2cdw_wgs));
            var gPolyline = new GPolyline(CPoints,"#ff3300",2,1);
            map.addOverlay(gPolyline);
            m2mesh.push(m2cd);
            break;
          }
        }
      }
    } else if(searchType[i].value=="m5" && searchType[i].checked){
      // 5kmメッシュを登録
      var m5list = searchObj.elements['m5[]'];
      for(var j=0;j<m5list.length;j++ ){
        str =m5list[j].value;
        str = str.replace(/^[ ]+|[ ]+$/g, '');
        if(str==""){
          m5list[j].value=m5cd;
          var CPoints=[];
          CPoints.push(new GLatLng(m5cds_wgs,m5cdw_wgs));
          CPoints.push(new GLatLng(m5cdn_wgs,m5cdw_wgs));
          CPoints.push(new GLatLng(m5cdn_wgs,m5cde_wgs));
          CPoints.push(new GLatLng(m5cds_wgs,m5cde_wgs));
          CPoints.push(new GLatLng(m5cds_wgs,m5cdw_wgs));
          var gPolyline = new GPolyline(CPoints,"#ff3300",2,1);
          map.addOverlay(gPolyline);
          break;
        }
      }
    } else if(searchType[i].value=="pt" && searchType[i].checked){
      searchObj.lat.value = lat1.toFixed(5);
      searchObj.lon.value = lng1.toFixed(5);
    }
  }

}


/** readMesh KML */
function readKML(map){
  var currentLevel = map.getZoom();
  if(currentLevel<9){
    if(datalevel!=1){
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh1st.kml");
      map.addOverlay(readkml);
      datalevel=1;
    }
  } else if(currentLevel>=9 && currentLevel<11){
    if(datalevel!=2){
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh2nd.kml");
      map.addOverlay(readkml);
      datalevel=2;
    }
  } else if(currentLevel>=11){
    if(datalevel!=3){
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh5km.kml");
      map.addOverlay(readkml);
      datalevel=3
    }
  }
}

function showZukaku(val){
  switch(val){
    case '1':
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh1st.kml");
      map.addOverlay(readkml);
      break;
    case '2':
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh2nd.kml");
      map.addOverlay(readkml);
      break;
    case '3':
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh5km_donan.kml");
      map.addOverlay(readkml);
      break;
    case '4':
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh5km_douou.kml");
      map.addOverlay(readkml);
      break;
    case '5':
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh5km_doutou.kml");
      map.addOverlay(readkml);
      break;
    case '6':
      map.removeOverlay(readkml);
      readkml = new GGeoXml(serverurl+"mesh/mesh5km_dohoku.kml");
      map.addOverlay(readkml);
      break;

    default:
      if(readkml) map.removeOverlay(readkml);
  }
}

function clearInputValue(form){
  if(form.address){
    form.address.value="";
  }
}

