//ポイントを追加するプラグイン

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( mapName ));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(36, 139.7), 5);
    map.geocoder = new GClientGeocoder();
    map.PointerIcon = new GIcon;
    map.PointerIcon.image = "/images/epoint.png";
    map.PointerIcon.iconSize = new GSize(25,25);
    map.PointerIcon.iconAnchor = new GPoint(13,13);
    map.PointerIcon.infoWindowAnchor = new GPoint(25,25);
    GEvent.addListener(map, "infowindowclose", function(){
      unsetPointer();
    });
    setCategories();
    map.cateOptions = "";
    setControlBar();
  }else{
    alert("Google Mapsが対応していないブラウザです。");
  }
}

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

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

function setControlBar(){
  if($("controlBar") != null){
    var cStr = "<div style=\"float:left\"><button type=\"submit\" name=\"setPointer\" onclick=\"setPointer();\"><img src=\"/images/epoint.png\" style=\"width:20px;height:20px;\" alt=\"SET POINTER\" /></button>";
    cStr += "<button type=\"submit\" name=\"unsetPointer\" onclick=\"unsetPointer();\"><img src=\"/images/epointx.png\" style=\"width:20px;height:20px;\" alt=\"UNSET POINTER\" /></button></div>";
    cStr += "<div style=\"vertical-align:middle;text-indent:10px;\"><form action=\"javascript:;\" onsubmit=\"searchAddress();\" name=\"fadd\">";
    cStr += "<input type=\"text\" name=\"sAddress\" />";
    cStr += "<input type=\"submit\" value=\"住所へ移動\" /></form></div>";
    $("controlBar").innerHTML = cStr;
  }
}

function $(id){
  return document.getElementById(id);
}

function setPointer(){
  map.PointerMarker = new GMarker( map.getCenter(), map.PointerIcon);
  map.addOverlay(map.PointerMarker);
  map.setPointerEvent = GEvent.addListener(map, "mousemove", function(latlng){
     map.PointerMarker.setPoint(latlng);
  });
  map.Pointer = GEvent.addListener( map.PointerMarker , 'click', function() {
    GEvent.removeListener(map.setPointerEvent);
    var point = map.PointerMarker.getPoint();
    var lon = point.x;
    var lat = point.y;
    setPointForm(lat,lon);
  });
}

function unsetPointer(){
  map.clearOverlays();
  GEvent.removeListener(map.Pointer);
}

function setPointForm(lat,lon){
  var zoom = map.getZoom();
  map.pSubjectFlg = 0;
  map.pBodyFlg = 0;
  var fStr = "<div id=\"setPointWindow\"><h4>この地点を登録</h4><div id=\"setPointWindowForm\"><form action=\"javascript:;\" name=\"pForm\" onsubmit=\" sendPointForm();\">";
  fStr += "<input type=\"hidden\" name=\"lat\" value=\""+lat+"\" />";
  fStr += "<input type=\"hidden\" name=\"lon\" value=\""+lon+"\" />";
  fStr += "<input type=\"hidden\" name=\"zoom\" value=\""+zoom+"\" />"; 
  fStr += "表題 : <input type=\"text\" name=\"pSubject\" size=\"25\" value=\"必須\" onclick=\" if(map.pSubjectFlg != 1){ this.value='';map.pSubjectFlg=1;}\"/><br />";
  fStr += "本文 : <textarea name=\"pBody\" cols=\"25\" rows=\"4\" onclick=\" if(map.pBodyFlg != 1){ this.value=''; map.pBodyFlg = 1}\" >必須</textarea><br />";
  fStr += "カテゴリ : <select name=\"cateid\">"+map.categoryOptions+"</select><br />";
  fStr += "名前 : <input type=\"text\" name=\"pName\" size=\"25\" /><br />";
  fStr += "Mail: <input type=\"text\" name=\"pMail\" size=\"25\" /><br />";
  fStr += "HP : <input type=\"text\" name=\"pSite\" size=\"25\" value=\"http://\" /><br />";
  fStr += "<input type=\"submit\" value=\"送信\" />";
  fStr += "<div id=\"setPointAddress\"></div></form></div></div>";
  map.openInfoWindowHtml(new GLatLng(lat,lon) , fStr );
  getInvGeocode(lat,lon);
}

function sendPointForm(){
  var fD = document.pForm;
  if(! fD.pSubject.value.match(/.+/)){
    alert("表題がありません");
    return null;
  }
  if(! fD.pBody.value.match(/.+/)){
    alert("本文がありません");
    return null;
  }
  var fStr = "<div id=\"setPointWindowForm\">下記が入力されています。確認して登録する場合は送信して下さい。<form action=\"javascript:;\" name=\"pForm2\" onsubmit=\" setSendData();\">";
  fStr += "<input type=\"submit\" value=\"下記確認して送信\" /><br />";
  fStr += "住所：<input type=\"text\" name=\"pAddress\" size=\"25\" value=\""+fD.pAddress.value+"\" /><br />";
  fStr += "<input type=\"radio\" name=\"pubflg\" value=\"1\" checked />公開";
  fStr += "<input type=\"radio\" name=\"pubflg\" value=\"0\" />非公開<br />";
  fStr += "<input type=\"hidden\" name=\"lat\" value=\""+fD.lat.value+"\" />";
  fStr += "<input type=\"hidden\" name=\"lon\" value=\""+fD.lon.value+"\" />";
  fStr += "<input type=\"hidden\" name=\"zoom\" value=\""+fD.zoom.value+"\" />";
  fStr += "表題：<input type=\"hidden\" name=\"pSubject\" value=\""+fD.pSubject.value+"\" />"+fD.pSubject.value+"<br />";
  fStr += "本文：<br /><pre><input type=\"hidden\" name=\"pBody\" value=\""+fD.pBody.value+"\" />"+fD.pBody.value+"</pre><br />";
  fStr += "カテゴリー：<br /><input type=\"hidden\" name=\"cateid\" value=\""+fD.cateid.value+"\" />"+map.categoryNames[fD.cateid.value]+"<br />";
  fStr += "名前：<input type=\"hidden\" name=\"pName\"value=\""+fD.pName.value+"\" />"+fD.pName.value+"<br />";
  fStr += "Email：<input type=\"hidden\" name=\"pMail\" value=\""+fD.pMail.value+"\" />"+fD.pMail.value+"<br />";
  fStr += "HP：<input type=\"hidden\" name=\"pSite\" value=\""+fD.pSite.value+"\" />"+fD.pSite.value+"<br />";
  fStr += "</form>";
  $("setPointWindowForm").innerHTML = fStr;
}

function getInvGeocode(lat,lon){
  var url = "invGeocode.php";
  var request = GXmlHttp.create();
  request.open("POST", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
       var xmlObj = request.responseXML;
       var pref = (xmlObj.getElementsByTagName("pref").item(0))? xmlObj.getElementsByTagName("pref").item(0).firstChild.nodeValue : "" ;
       var city = (xmlObj.getElementsByTagName("city").item(0))? xmlObj.getElementsByTagName("city").item(0).firstChild.nodeValue : "" ;
       var town = (xmlObj.getElementsByTagName("town").item(0))? xmlObj.getElementsByTagName("town").item(0).firstChild.nodeValue : "" ;
       var address = pref+city+town;
       if($("setPointAddress")) $("setPointAddress").innerHTML = "<input type=\"hidden\" name=\"pAddress\" value=\""+address+"\">住所自動検索："+address+"付近<br />";
    }
  }
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.send("lat="+lat+"&lon="+lon);
}

function setSendData(){
  var fD = document.pForm2;
  if(! fD.pSubject.value.match(/.+/)){
    alert("表題がありません");
    return null;
  }
  if(! fD.pBody.value.match(/.+/)){
    alert("本文がありません");
    return null;
  }
  var pStr = "pSubject="+fD.pSubject.value;
  pStr += "&pBody="+fD.pBody.value;
  pStr += "&pName="+fD.pName.value;
  pStr += "&pMail="+fD.pMail.value;
  pStr += "&pSite="+fD.pSite.value;
  pStr += "&lat="+fD.lat.value;
  pStr += "&lon="+fD.lon.value;
  pStr += "&zoom="+fD.zoom.value;
  pStr += "&pAddress="+fD.pAddress.value;
  pStr += "&cateid="+fD.cateid.value;
  pStr += "&pubflg="+radioCheck(fD.pubflg);
  sendData(pStr);
}

function sendData(postData){
  $("setPointWindowForm").innerHTML = "通信中";
  var url = "insertData.php";
  var request = GXmlHttp.create();
  request.open("POST", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
       eval("var ResObj = " + request.responseText);
       var resText = "<b>" + ResObj.message + "</b><br />下記のタグでブログにこのポイントが貼れます。";
       resText += "<br /><div id=\"pointTag\" style=\"width:270px;height:100px;overflow:scroll;background-color:#ebffe9;\">"+ResObj.tags+"</div>" ;
       resText += "<br /><a href=\"javascript:void(0);\" onclick=\"tagEditerView('"+ResObj.PID+"');\">このタグを表示して編集する</a>";
       $("setPointWindowForm").innerHTML = resText;
    }
  }
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.send(postData);
}

function setCategories(){
  var url = "cateOut.php";
  var request = GXmlHttp.create();
  request.open("POST", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
       eval("map.categories = " + request.responseText);
       map.categoryNames = {};
       for(i=0;i<map.categories.length;i++){
         map.categoryNames[map.categories[i].id] = map.categories[i].catename;
         map.categoryOptions += "<option value=\""+map.categories[i].id+"\">"+map.categories[i].catename+"</option>";
       }
    }
  }
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.send(null);
}

function searchAddress(){
  var address = document.fadd.sAddress.value;
  map.geocoder.getLatLng(
    address,
    function(point){
      if(point){
        map.setCenter(point);
      }else{
        alert(address + " Not Found !!");
      }
    }
  );
}

function radioCheck(obj) {
//フォームのradioのチェック
  var i;
  if (obj.length) {
    for (i = 0; i < obj.length; i++) {
      if ( obj[i].checked) {
        return obj[i].value;
      }
    }
  } else {
    if (obj.checked) {
      return obj.value;
    }
  }
}
