//ONSEN 2007 with JALAN 070412

var Regions = {};
var Prefectures = {};
var LargeAreas = {};
var SmallAreas = {};
var nowCD = "";
var map = {};
var markers = {};
var Hmarkers = {};
var Onsens = {};
var geocoders = {};
var latlon = {};
var onsenIcon = new GIcon();
var hotelIcon = new GIcon();
var extraData = {};
extraData.markers = {};
var nowSearchPost = {};
var searchHotelFlg = 0;

function setSenshitsu(){
  var Senshitsu = {"0":"絞り込まない","1":"単純温泉","2":"アルカリ単純泉","3":"単純炭酸泉","4":"弱アルカリ性低張性泉","5":"中性低張性高温泉","6":"塩化物泉", "7":"ナトリウム塩化物泉","8":"炭酸水素塩泉","9":"炭酸鉄泉","10":"硫酸塩泉","11":"二酸化炭素泉","12":"含鉄泉","13":"含銅一鉄泉","14":"硫黄泉","15":"酸性泉","16":"含アルミニウム泉","17":"放射能泉","18":"鉱泉","99":"その他"};
  var onsenOpt = "<select name=\"onsen_q\">";
  for ( var tt in Senshitsu ){
    onsenOpt += "<option value=\""+tt+"\">"+Senshitsu[tt]+"</option>";
  }
  onsenOpt += "</select>";
  document.getElementById("seleSenshitsu").innerHTML = onsenOpt;
}

function getJalanArea(){
  setSenshitsu();
  document.getElementById("selectRegion").innerHTML = "読み込み中";
  var url = "getJalan.php";
  var request = GXmlHttp.create();
  request.open("POST", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
       var xmlDoc = request.responseXML;
       Regions = xmlDoc.getElementsByTagName("Region");
       myStr = "<select name=\"reg\" onchange=\"setPrefecture( this.value ) \"><option option value=\"-1\">地域選択</option>";
       for(i=0;i<Regions.length;i++){
         myStr += "<option value=\""+Regions.item(i).getAttribute("cd") +"\">"+Regions.item(i).getAttribute("name")+"</option>";
       }
       myStr += "</select>";
       document.getElementById("selectRegion").innerHTML = myStr;
       document.getElementById("selectPrefecture").innerHTML = "<select name=\"pref\"><option value=\"\">未選択</option></select>";
       document.getElementById("selectLargeArea").innerHTML = "<select name=\"l_area\"><option value=\"\">未選択</option></select>";
       document.getElementById("selectSmallArea").innerHTML = "<select name=\"s_area\"><option value=\"\">未選択</option></select>";
    }
  }
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.send(null);
}

function setPrefecture(cd){
  nowCD = cd;
  for(i=0;i<Regions.length;i++){
    if(Regions.item(i).getAttribute("cd") == cd) Prefectures = Regions.item(i).getElementsByTagName("Prefecture") ;
  }
  myStr = "<select name=\"pref\" onchange=\"setLargeArea( this.value ) \"><option>都道府県選択</option>";
  for(i=0;i<Prefectures.length;i++){
         myStr += "<option value=\""+Prefectures.item(i).getAttribute("cd") +"\">"+Prefectures.item(i).getAttribute("name")+"</option>";
  }
  myStr += "</select>";
  document.getElementById("selectPrefecture").innerHTML = myStr;
  document.getElementById("selectLargeArea").innerHTML = "<select name=\"l_area\"><option value=\"\">未選択</option></select>";
  document.getElementById("selectSmallArea").innerHTML = "<select name=\"s_area\"><option value=\"\">未選択</option></select>";
}

function setLargeArea(cd){
  nowCD = cd;
  for(i=0;i<Prefectures.length;i++){
    if(Prefectures.item(i).getAttribute("cd") == cd) LargeAreas = Prefectures.item(i).getElementsByTagName("LargeArea") ;
  }
  myStr = "<select name=\"l_area\" onchange=\"setSmallArea( this.value ) \"><option>広域選択</option>";
  for(i=0;i<LargeAreas.length;i++){
         myStr += "<option value=\""+LargeAreas.item(i).getAttribute("cd") +"\">"+LargeAreas.item(i).getAttribute("name")+"</option>";
  }
  myStr += "</select>";
  document.getElementById("selectLargeArea").innerHTML = myStr;
  document.getElementById("selectSmallArea").innerHTML = "<select name=\"s_area\"><option value=\"\">未選択</option></select>";
}

function setSmallArea(cd){
  nowCD = cd;
  for(i=0;i<LargeAreas.length;i++){
    if(LargeAreas.item(i).getAttribute("cd") == cd) SmallAreas = LargeAreas.item(i).getElementsByTagName("SmallArea") ;
  }
  myStr = "<select name=\"s_area\" onchange=\"setCD( this.value ) \"><option>狭地域選択</option>";
  for(i=0;i<SmallAreas.length;i++){
         myStr += "<option value=\""+SmallAreas.item(i).getAttribute("cd") +"\">"+SmallAreas.item(i).getAttribute("name")+"</option>";
  }
  myStr += "</select>";
  document.getElementById("selectSmallArea").innerHTML = myStr;
}

function setCD(cd){
  nowCD = cd;
}

function sendCD(){
  if(document.selectArea.reg.value == -1){
    alert("地域を選択して下さい");
    return null;
  }
  viewLoading();
  document.getElementById("ResOnsen").innerHTML = "読み込み中";
  var url = "getJalan.php";
  var addPost = ""
  if(document.selectArea.reg.value.match(/[0-9]+/)) addPost = "&reg=" + document.selectArea.reg.value;
  if(document.selectArea.pref.value.match(/[0-9]+/)) addPost = "&pref=" + document.selectArea.pref.value;
  if(document.selectArea.l_area.value.match(/[0-9]+/)) addPost = "&l_area=" + document.selectArea.l_area.value;
  if(document.selectArea.s_area.value.match(/[0-9]+/)) addPost = "&s_area=" + document.selectArea.s_area.value;
  addPost += "&onsen_q=" +document.selectArea.onsen_q.value;
  nowSearchPost.poststr = addPost;
  nowSearchPost.start = 1;
  getOnsenData("searchmode=OnsenSearch"+addPost);
}

function getOnsenData(post){
  var request = GXmlHttp.create();
  request.open("POST", "getJalan.php", true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
       OnsenTable( request.responseXML );
    }
  }
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.send(post);
}

function nextCD(){
  nowSearchPost.start += 25;
  getOnsenData("searchmode=OnsenSearch"+　nowSearchPost.poststr　+ "&start="+nowSearchPost.start);
}

function preCD(){
  nowSearchPost.start -= 25;
  getOnsenData("searchmode=OnsenSearch"+　nowSearchPost.poststr　+ "&start="+nowSearchPost.start);
}

function OnsenTable(Obj){
  map.clearOverlays();
  extraData.res = Obj.getElementsByTagName("NumberOfResults").item(0).firstChild.nodeValue;
  var OnsensObj = Obj.getElementsByTagName("Onsen");
  var onsenTable = (extraData.res > 0 )? "<b>"+extraData.res+"件ありました</b>":"<b>この条件では一件もありません</b>";
  if(extraData.res > 25){
    var end = nowSearchPost.start + 24;
    onsenTable += "<br />"+nowSearchPost.start + "-"　+ end + "までを表示しています<br />";
    if(nowSearchPost.start > 25) onsenTable += "　<a href=\"javascript:;\" onclick=\"preCD();\">前の25件</a>　";
    if(end < extraData.res) onsenTable += "　<a href=\"javascript:;\" onclick=\"nextCD();\">次の25件</a>";
  }
  onsenTable += "<table class=\"onsenTable\">";
  Onsens = [];
  latlon.maxlat = latlon.minlat = latlon.maxlon = latlon.minlon = 999;
  for(i=0;i<OnsensObj.length;i++){
    var Onsen = OnsensObj.item(i);
    var OnsenID = Onsen.getElementsByTagName("OnsenID").item(0).firstChild.nodeValue;
    Onsens[i] = {};
    Onsens[i].OnsenID = Onsen.getElementsByTagName("OnsenID").item(0).firstChild.nodeValue;
    Onsens[i].name = Onsen.getElementsByTagName("OnsenName").item(0).firstChild.nodeValue;
    Onsens[i].address = Onsen.getElementsByTagName("OnsenAddress").item(0).firstChild.nodeValue;
    Onsens[i].senshitsu = Onsen.getElementsByTagName("NatureOfOnsen").item(0).firstChild.nodeValue;
    if(Onsen.getElementsByTagName("OnsenAreaCaption").item(0).firstChild){
      Onsens[i].caption = Onsen.getElementsByTagName("OnsenAreaCaption").item(0).firstChild.nodeValue;
    }else{
      Onsens[i].caption = "";
    }
    Onsens[i].finish = 0;
    onsenTable += "<tr><td><a href=\"javascript:;\" onclick=\"openInfoWindow('"+Onsens[i].OnsenID+"');\">" + Onsens[i].name+"</a>" ;
    onsenTable += "</td><td>" + Onsens[i].senshitsu;
    onsenTable += "</td><td>" + Onsens[i].address ;
    onsenTable += "</td></tr>";
  }
  onsenTable += "</table>";
  if(nowSearchPost.start > 25) onsenTable += "　<a href=\"javascript:;\" onclick=\"preCD();\">前の25件</a>　";
  if(extraData.res > 25 && end < extraData.res){
    onsenTable += "　<a href=\"javascript:;\" onclick=\"nextCD();\">次の25件</a>";
  }
  document.getElementById("ResOnsen").innerHTML = onsenTable;
  if(extraData.res > 0 ) getGeocode();
}


function getGeocode(){
  var ff = 1;
  for(i=0;i<Onsens.length;i++){
    var nowAddress = Onsens[i].address;
    if(Onsens[i].tmpaddress) nowAddress = Onsens[i].tmpaddress;
    if( Onsens[i].finish != 1 ){
      ff = 0;
      map.geocoder.getLatLng(
        nowAddress ,
        function(point){
          var id = Onsens[i].OnsenID;
          if (!point) {
            Onsens[i].finish = 1;
            extraData.markers[id] = {};
            extraData.markers[id].infoHTML = "<div class=\"popInfo\"><b>"+Onsens[i].name +"</b><br />所在地："+ Onsens[i].address + "<br /><span style=\"color:blue;\">登録住所が検索できなかったので、住所をカットして検索しています。</span>泉質："+ Onsens[i].senshitsu + "<br /><div class=\"onsenCaption\">"+Onsens[i].caption+"</div><a href=\"javascript:;\" onclick=\"getHotelByOnsen('"+id+"')\">この温泉の宿泊施設</a><div id=\"HotelList\"></div></div>";
            extraData.markers[id].errorHTML = "<div class=\"popInfo\"><b>"+Onsens[i].name +"</b><br />所在地："+ Onsens[i].address + "<br /><span style=\"color:red;\">緯度経度が検索出来ませんでしたので、マーカーはありません。地図の中心に表示しています。</span><br />泉質："+ Onsens[i].senshitsu + "<br /><div class=\"onsenCaption\">"+Onsens[i].caption+"</div><a href=\"javascript:;\" onclick=\"getHotelByOnsen('"+id+"')\">この温泉の宿泊施設</a><div id=\"HotelList\"></div></div>";
            extraData.markers[id].address = Onsens[i].address ;
            extraData.markers[id].name = Onsens[i].name ;
            getGeocode();
          }else{
            Onsens[i].point = point;
            Onsens[i].lat = parseFloat(point.lat());
            Onsens[i].lon = parseFloat(point.lng());
            setOnsenMarker(Onsens[i]);
            Onsens[i].finish = 1;
            getGeocode();
            return null;
          }
        }
      );
      break;
    }
  }
  if( ff==1 ){
    setBounseCenterAndZoom();
    hideLoading();
    searchJALAN();
  }
}

function setOnsenMarker(O){
  var id = O.OnsenID;
  if(latlon.maxlat == 999){
    latlon.maxlat = O.lat;
    latlon.minlat = O.lat;
    latlon.maxlon = O.lon;
    latlon.minlon = O.lon;
  }else{
    if(O.lat > latlon.maxlat) latlon.maxlat = O.lat;
    if(O.lon > latlon.maxlon) latlon.maxlon = O.lon; 
    if(O.lat < latlon.minlat) latlon.minlat = O.lat;
    if(O.lon < latlon.minlon) latlon.minlon = O.lon; 
  }
  markers[id] = new GMarker( new GLatLng(O.lat,O.lon) ,onsenIcon);
  map.addOverlay(markers[id]);
  markers[id].infoHTML = "<div class=\"popInfo\"><b>"+O.name +"</b><br />所在地："+ O.address + "<br />泉質："+ O.senshitsu + "<br /><div class=\"onsenCaption\">"+O.caption+"</div><a href=\"javascript:;\" onclick=\"getHotelByOnsen('"+id+"')\">この温泉の宿泊施設</a><div id=\"HotelList\"></div></div>";
  GEvent.addListener(markers[id], "click", function(){
    markers[id].openInfoWindowHtml(markers[id].infoHTML);
  });
}

function openInfoWindow(id){
  if(markers[id]){
    markers[id].openInfoWindowHtml(markers[id].infoHTML);
  }else{
    //再度検索
    var nowAddress = extraData.markers[id].address;
    nowAddress = nowAddress.replace(/(.+)村.+/,"$1村");
    nowAddress = nowAddress.replace(/(.+)町.+/,"$1町");
    if(! nowAddress.match(/(.+)町.+/)) nowAddress = nowAddress.replace(/(.+)区.+/,"$1区");
    map.geocoder.getLatLng(
      nowAddress ,
      function(point){
        if (!point) {
          map.openInfoWindowHtml( map.getCenter(), extraData.markers[id].errorHTML);
        }else{
          markers[id] = new GMarker(point,onsenIcon);
          map.addOverlay(markers[id]);
          markers[id].infoHTML = extraData.markers[id].infoHTML;
          GEvent.addListener(markers[id], "click", function(){
            markers[id].openInfoWindowHtml(markers[id].infoHTML);
          });
          markers[id].openInfoWindowHtml(markers[id].infoHTML);
        }
      } 
    );
  }
}

function setBounseCenterAndZoom(){
  latlon.avglat = ( latlon.maxlat + latlon.minlat ) / 2;
  latlon.avglon = ( latlon.maxlon + latlon.minlon ) / 2;
  latlon.zm = map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(latlon.minlat,latlon.minlon),new GLatLng(latlon.maxlat,latlon.maxlon)));
  if(latlon.zm > 15) latlon.zm = 15;
  map.setCenter(new GLatLng(latlon.avglat,latlon.avglon),latlon.zm);
}

window.onload = function(){
  getJalanArea();
  initMap();
}

function initMap(){
  if (GBrowserIsCompatible()) {
    if(document.getElementById("NowLoading") == null) {
      var addStr = "<div id=\"NowLoading\" style=\" padding: 6px; position: absolute; left: 100px; top: 100px; z-index: 99; font-size: 18px; color: orange; background-color: #555555;filter: alpha(opacity=50); -moz-opacity:0.5; opacity:0.5;\">検索しています。</div>";
      document.getElementsByTagName("body").item(0).innerHTML = document.getElementsByTagName("body").item(0).innerHTML + addStr;
　　　　hideLoading();
    }
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(36, 139.7), 5);
    map.geocoder = new GClientGeocoder();
    //温泉アイコン
    onsenIcon.iconAnchor = new GPoint(15,30);
    onsenIcon.infoWindowAnchor = new GPoint(10,10);
    onsenIcon.image = "/images/onsen.png";
    onsenIcon.iconSize = new GSize(28,28);
    hotelIcon.iconAnchor = new GPoint(8,18);
    hotelIcon.infoWindowAnchor = new GPoint(10,10);
    hotelIcon.image = "http://maps.pc-ktai.com/images/h.png";
    hotelIcon.iconSize = new GSize(18,18);
  }
}

function viewLoading(){
  document.getElementById("NowLoading").style.display = "block";
}

function hideLoading(){
  document.getElementById("NowLoading").style.display = "none";
}

function searchJALAN(){
  searchHotelFlg = 0;
  var addPost = ""
  if(document.selectArea.reg.value.match(/[0-9]+/)) addPost = "&reg=" + document.selectArea.reg.value;
  if(document.selectArea.pref.value.match(/[0-9]+/)) addPost = "&pref=" + document.selectArea.pref.value;
  if(document.selectArea.l_area.value.match(/[0-9]+/)) addPost = "&l_area=" + document.selectArea.l_area.value;
  if(document.selectArea.s_area.value.match(/[0-9]+/)) addPost = "&s_area=" + document.selectArea.s_area.value;
  nowSearchPost.poststrH = addPost;
  nowSearchPost.startH = 1;
  getHotelData("apimode=APIAdvance&searchmode=HotelSearch"+addPost);
}

function getHotelData(postStr){
  if(searchHotelFlg == 1 ){
    document.getElementById("HotelList").innerHTML = "宿泊施設を検索しています";
  }else{
    document.getElementById("HotelRes").innerHTML = "宿泊施設を検索しています";
  } 
  var request2 = GXmlHttp.create();
  request2.open("POST", "getJalan.php", true);
  request2.onreadystatechange = function() {
    if (request2.readyState == 4) {
       setHotelData( request2.responseXML );
       hideLoading();
    }
  }
  request2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request2.send(postStr);
}
var Hotels = {};

function getHotelByOnsen(id){
  searchHotelFlg = 1;
  viewLoading();
  getHotelData("apimode=APIAdvance&searchmode=HotelSearch&o_id="+id);
}

function setHotelData(xmlObj){
  removeHMarker();
  var Obj = xmlObj.getElementsByTagName("Hotel");
  var hStr = "<ul>";
  for(i=0;i<Obj.length;i++){
    var id = getNodeValue(Obj[i],"HotelID");
    var O = {};
    O.name = getNodeValue(Obj[i],"HotelName");
    O.id = id;
    O.zip = getNodeValue(Obj[i],"PostCode");
    O.address = getNodeValue(Obj[i],"HotelAddress");
    O.caption = getNodeValue(Obj[i],"HotelCaption");
    O.url = getNodeValue(Obj[i],"HotelDetailURL");
    O.pic = getNodeValue(Obj[i],"PictureURL");
    O.Y = getNodeValue(Obj[i],"Y");
    O.X = getNodeValue(Obj[i],"X");
    var p = jalan2gwgs(O.Y,O.X);
    O.lat = p.lat;
    O.lon = p.lon;
    hStr += "<li><a href=\"javascript:;\" onclick=\"openPoPHotel('"+O.id+"')\">"+O.name+"</a></li>";
    addHMarker(O);
  }
  hStr += "</ul>";
  if( Obj.length == 0) hStr = "指定エリアには一軒もありません";
  if(searchHotelFlg == 1){
    document.getElementById("HotelList").innerHTML = hStr;
    document.getElementById("HotelRes").innerHTML = hStr;
  }else{
    document.getElementById("HotelRes").innerHTML = hStr;
  }
}

function getNodeValue(Obj,id){
  if((Obj.getElementsByTagName(id)) && (Obj.getElementsByTagName(id).item(0).firstChild.nodeValue)){
    return Obj.getElementsByTagName(id).item(0).firstChild.nodeValue;
  }else{
    return null;
  }
}

function jalan2gwgs(lat,lon){
  var glat = lat/3600000;
  var glon = lon/3600000;
  var p = {};  
  p.lat = glat - 0.00010695 * glat + 0.000017464 * glon + 0.0046017;
  p.lon = glon - 0.000046038 * glat - 0.000083043 * glon + 0.010040;
  return p;
}

function addHMarker(O){
  var id = O.id;
  Hmarkers[id] = new GMarker( new GLatLng(O.lat,O.lon) ,hotelIcon);
  map.addOverlay(Hmarkers[id]);
  var JalanURL = "<a href=\"http://px.a8.net/svt/ejp?a8mat=15X71U+7TM1WY+14CS+639IQ&a8ejpredirect=http%3A%2F%2Fwww.jalan.net%2Fcgi-bin%2Fjalan%2Fjweb%2Faf_entry.cgi%3Fkey%3DA8%26next_url%3D";
  thisURL = encodeURIComponent(encodeURIComponent(O.url));
  JalanURL += thisURL.replace("jws.jalan.net","jws%252ejalan%252enet");
  JalanURL += "%2526vos%253dnjala8nt00001\" target=\"_blank\">\n";
  JalanURL += "<img src=\""+O.pic+"\" style=\"border:0\" /><br />"
  JalanURL += "じゃらんで詳細をみる</a><img border=\"0\" width=\"1\" height=\"1\" src=\"http://www13.a8.net/0.gif?a8mat=15X71U+7TM1WY+14CS+639IQ\" alt=\"\">";
  Hmarkers[id].infoHTML = "<div class=\"popUpHotelInfo\"><b>"+O.name+"</b><br />〒"+O.zip+" "+O.address+"<br /><div class=\"popUpHotelcaption\">"+O.caption+"<br />"+JalanURL+"</div>";
  GEvent.addListener(Hmarkers[id], "click", function(){
    Hmarkers[id].openInfoWindowHtml(Hmarkers[id].infoHTML);
  });
}

function removeHMarker(){
  for(var id in Hmarkers ){
    map.removeOverlay(Hmarkers[id]);
  }
}

function openPoPHotel(id){
  Hmarkers[id].openInfoWindowHtml(Hmarkers[id].infoHTML);
}










