var map;
var info = new Array();
var list = new Array();
var count;
var color;

//********************************
//   初期処理
//   マップ表示
//********************************
function onLoad() {
  var addmarker;
  var ZoomLevel;
  var CenterPoint;

  $('tabList').style.background="#ffffff";
  ZoomLevel = 2;
  CenterPoint = new GPoint(132.45973348617554, 34.39285185471987);

  map = new GMap(document.getElementById("map"));
  map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  map.centerAndZoom(CenterPoint, ZoomLevel);

  GEvent.addListener(map, 'click', function(overlay, point) {
    if (overlay) {
      if(addmarker != "") {
        map.removeOverlay(addmarker);
        document.frm.lng.value = "";
        document.frm.lat.value = "";
      }
    } else if (point) {
      if(addmarker != "") {
        map.removeOverlay(addmarker);
        document.frm.lng.value = "";
        document.frm.lat.value = "";
      }
      addmarker = new GMarker(point);
      map.addOverlay(addmarker);
      document.frm.lng.value = point.x;
      document.frm.lat.value = point.y;
      document.mnt.lng.value = point.x;
      document.mnt.lat.value = point.y;
    }
  });

  request();
}

//********************************
//   マーカー表示
//********************************
function createMarker(point, html) {
  var marker = new GMarker(point);

  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}

//********************************
//   リンクからマーカーインフォ表示
//********************************
function nameclick(a) {
  GEvent.trigger(info[a], 'click');
}

//********************************
//   リンクからマーカーインフォ表示
//********************************
function listdisp(a, div) {
  var txt = "";
  var x;
  var header = "";
  var v;
  var z;
  var i;

  z = count / 10;

  if(z > 0) {
    for(i = 0; i < z; i++) {
      header = header + '<a href="javascript: void(0);" onClick="listdisp(' + (i * 10) + ', \'' + div + '\')">' + (i + 1) + '</a>&nbsp;';
    }
  }

  if((a + 10) > count) {
    x = count;
  } else {
    x = a + 10;
  }

  for(i = a; i < x; i++) {
    txt = txt + list[i];
  }

  if(header != "") {
    txt = header + "<hr />" + txt + header;
  }

  document.getElementById(div).innerHTML = txt;
}

//********************************
//   お店データ表示
//********************************
function reload() {
  $('tabList').style.background = "#ffffff";
  $('tabPost').style.background = "#cccccc";
  $('tabMainte').style.background = "#cccccc";
  document.getElementById("list").style.display = "block";
  document.getElementById("input").style.display = "none";
  document.getElementById("mainte").style.display = "none";
  map.clearOverlays();

  request();
}

//********************************
//   投稿
//********************************
function posting() {
  $('tabList').style.background = "#cccccc";
  $('tabPost').style.background = "#ffffff";
  $('tabMainte').style.background = "#cccccc";
  document.getElementById("list").style.display = "none";
  document.getElementById("input").style.display = "block";
  document.getElementById("mainte").style.display = "none";
}

//********************************
//   管理
//********************************
function maintenance() {
  $('tabList').style.background = "#cccccc";
  $('tabPost').style.background = "#cccccc";
  $('tabMainte').style.background = "#ffffff";
  document.getElementById("list").style.display = "none";
  document.getElementById("input").style.display = "none";
  document.getElementById("mainte").style.display = "block";
}

//********************************
//   受信
//********************************
function request(){
  var addr;
  var tel;
  var url;
  var comment;
  var reg;

  var request = GXmlHttp.create();
  request.open("GET", "hiroshimaps.php?mode=disp", true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = request.responseXML;
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
      count = markers.length;
      for (var i = 0; i < count; i++) {
        var point = new GPoint(parseFloat(markers[i].getAttribute("lng")), parseFloat(markers[i].getAttribute("lat")));
        if(markers[i].getAttribute("url") != "") {
          url = '<br /><br /><a href="' + markers[i].getAttribute("url") + '" target="_blank">サイト</a>';
        } else {
          url = "";
        }

        comment = markers[i].getAttribute("comment");
        comment = comment.replace(/ /g, "&nbsp;");
        reg = new RegExp("\r\n|\r|\n", "g");
        comment = comment.replace(reg, "<br />");

        var html = '<b id="small">' + markers[i].getAttribute("name") + '</b><p><div id="cmt">' + comment + url + '</div></p>';
        var marker = createMarker(point, html);
        map.addOverlay(marker);
        info[i] = marker;
        if(markers[i].getAttribute("addr1") != "" && markers[i].getAttribute("addr2") != "") {
          addr = markers[i].getAttribute("addr1") + '<br />' + markers[i].getAttribute("addr2");
        } else if(markers[i].getAttribute("addr1") != "") {
          addr = markers[i].getAttribute("addr1");
        } else {
          addr = "";
        }

        if(markers[i].getAttribute("tel") != "") {
          tel =  '<br />' + markers[i].getAttribute("tel");
        } else {
          tel = "";
        }
        list[i] = '<b><a href="javascript: void(0);" onclick="javascript: nameclick(' + i + ')";>' + markers[i].getAttribute("name") + '</a></b><div class="address">' + addr + tel + '</div><hr size="1" noshade />';
      }
      listdisp('0', 'list');
    }
  }
  request.send(null);
}

//********************************
//   送信
//********************************
function pa_Submit(frm){
  if(document.body.style.cursor == 'wait') {
    return;
  }
  document.body.style.cursor = 'wait';
  frm.submit.style.disable = 'false';
  with(frm){
    if(name.value==""){ alert("お店の名前が入力されていません"); name.focus(); document.body.style.cursor = 'default'; frm.submit.style.disable = 'true'; return; }
    if(lng.value==""){ alert("マップに座標が入力されていません。\nマップでお店の場所をクリックしてください。"); document.body.style.cursor = 'default'; frm.submit.style.disable = 'true'; return; }
    form_Submit(frm);
  }
}

//********************************
//   ページ送信
//********************************
function form_Submit(frm){

  var data = new String();
  for( var i = 0 ; i < frm.elements.length ; i++ ){
    if( !frm.elements[i].disabled ){
      data += "&";
      data += frm.elements[i].name;
      data += "=";
      data += frm.elements[i].value;
    }
  }
  if( data.length > 0 ){
    data = data.substring(1);
  }
  else{
    window.alert("POSTするデータがありません。")
    return false;
  }

  var request = GXmlHttp.create();
  if (request) {
    request.onreadystatechange = function() {
      if (request.readyState == 4 && request.status == 200) {
        document.body.style.cursor = 'default';
        frm.submit.style.disable = 'true';
        frm.name.value = "";
        frm.comment.value = "";
        frm.lng.value = "";
        frm.lat.value = "";
      }
    }
    request.open("POST", "hiroshimaps.php?mode=ins", true);
    request.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
    request.send(data);
  }

}

//********************************
//   ログイン
//********************************
function login(x) {
  var flg;

  if(document.body.style.cursor == 'wait') {
    return;
  }

  document.body.style.cursor = 'wait';

  var data = new String();
  if( !document.mnt.elements[0].disabled ){
    data += "&";
    data += document.mnt.elements[0].name;
    data += "=";
    data += document.mnt.elements[0].value;
    flg = 1;
  }

  if( data.length > 0 ){
    data = data.substring(1);
  }

  if(x == 1) {
    data = null;
    flg = 2;
  }

  var request = GXmlHttp.create();
  if (request) {
    request.open("POST", "hiroshimaps.php?login=" + flg + "&mode=disp", true);
    request.onreadystatechange = function() {
      if (request.readyState == 4 && request.status == 200) {
        document.body.style.cursor = 'default';
        document.mnt.admin_pass.value = "";
        if(request.responseText == "0") {
          document.getElementById("list2").innerHTML = "ログアウトしました";
          document.getElementById("login").style.display = "block";
          document.getElementById("logout").style.display = "none";
          document.getElementById("update").style.display = "none";
        } else if(request.responseText == "1") {
          document.getElementById("list2").innerHTML = "パスワードが違います";
        } else if(request.responseText == "2") {
          document.getElementById("list2").innerHTML = "ログインしました";
          document.getElementById("login").style.display = "none";
          document.getElementById("logout").style.display = "block";
          request_mnt();
        }
      }
    }
    request.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
    request.send(data);
  }
}

//********************************
//   受信（メンテ用）
//********************************
function request_mnt(){
  var addr;
  var tel;
  var url;
  var comment;
  var reg;
  var mnt;

  var request = GXmlHttp.create();
  request.open("GET", "hiroshimaps.php?mode=disp", true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = request.responseXML;
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
      count = markers.length;
      for (var i = 0; i < count; i++) {
        var point = new GPoint(parseFloat(markers[i].getAttribute("lng")), parseFloat(markers[i].getAttribute("lat")));
        if(markers[i].getAttribute("url") != "") {
          url = '<br /><br /><a href="' + markers[i].getAttribute("url") + '" target="_blank">サイト</a>';
        } else {
          url = "";
        }

        comment = markers[i].getAttribute("comment");
        comment = comment.replace(/ /g, "&nbsp;");
        reg = new RegExp("\r\n|\r|\n", "g");
        comment = comment.replace(reg, "<br />");

        var html = '<b id="small">' + markers[i].getAttribute("name") + '</b><p><div id="cmt">' + comment + '<br />by ' + markers[i].getAttribute("username") + url + '</div></p>';
        var marker = createMarker(point, html);
        map.addOverlay(marker);
        info[i] = marker;
        if(markers[i].getAttribute("addr1") != "" && markers[i].getAttribute("addr2") != "") {
          addr = markers[i].getAttribute("addr1") + '<br />' + markers[i].getAttribute("addr2");
        } else if(markers[i].getAttribute("addr1") != "") {
          addr = markers[i].getAttribute("addr1");
        } else {
          addr = "";
        }

        if(markers[i].getAttribute("tel") != "") {
          tel =  '<br />' + markers[i].getAttribute("tel");
        } else {
          tel = "";
        }

        mnt = '<a href="javascript: void(0);" onclick="UpdateSet(' + markers[i].getAttribute("number") + ')">修正</a>';

        list[i] = '<b><a href="javascript: void(0);" onclick="javascript: nameclick(' + i + ')";>' + markers[i].getAttribute("name") + '</a></b><div class="address">' + addr + tel + '</div>' + mnt + '<hr size="1" noshade />';
      }
      listdisp('0', 'list2');
    }
  }
  request.send(null);
}

function UpdateSet(num) {
  var addr;
  var tel;
  var url;
  var comment;
  var reg;

  var request = GXmlHttp.create();
  request.open("GET", "hiroshimaps.php?mode=dataset&num=" + num, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = request.responseXML;
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");

      document.mnt.name.value = markers[0].getAttribute("name");
      document.mnt.tel.value = markers[0].getAttribute("tel");
      document.mnt.addr1.value = markers[0].getAttribute("addr1");
      document.mnt.addr2.value = markers[0].getAttribute("addr2");
      document.mnt.comment.value = markers[0].getAttribute("comment");
      document.mnt.url.value = markers[0].getAttribute("url");
      document.mnt.flg.value = markers[0].getAttribute("flg");
      document.mnt.lng.value = markers[0].getAttribute("lng");
      document.mnt.lat.value = markers[0].getAttribute("lat");
      document.mnt.num.value = num;

      document.getElementById("update").style.display = "block";
    }
  }
  request.send(null);
}

//********************************
//   送信
//********************************
function up_Submit(frm){
  if(document.body.style.cursor == 'wait') {
    return;
  }
  document.body.style.cursor = 'wait';
  frm.submit.style.disable = 'false';
  with(frm){
    if(name.value==""){ alert("お店の名前が入力されていません"); name.focus(); document.body.style.cursor = 'default'; frm.submit.style.disable = 'true'; return; }
    if(lng.value==""){ alert("マップに座標が入力されていません"); document.body.style.cursor = 'default'; frm.submit.style.disable = 'true'; return; }
    if(addr1.value=="" && addr2.value!=""){ alert("お店の住所は上から順に入力してください"); addr1.focus(); document.body.style.cursor = 'default'; frm.submit.style.disable = 'true'; return; }
    form_Update(frm);
  }
}

//********************************
//   ページ送信
//********************************
function form_Update(frm){

  var data = new String();
  for( var i = 0 ; i < frm.elements.length ; i++ ){
    if( !frm.elements[i].disabled ){
      data += "&";
      data += frm.elements[i].name;
      data += "=";
      data += frm.elements[i].value;
    }
  }
  if( data.length > 0 ){
    data = data.substring(1);
  }
  else{
    window.alert("POSTするデータがありません。")
    return false;
  }

  var request = GXmlHttp.create();
  if (request) {
    request.onreadystatechange = function() {
      if (request.readyState == 4 && request.status == 200) {
        document.body.style.cursor = 'default';
        frm.submit.style.disable = 'true';
        frm.name.value = "";
        frm.tel.value = "";
        frm.addr1.value = "";
        frm.addr2.value = "";
        frm.comment.value = "";
        frm.url.value = "";
        frm.flg.value = "";
        frm.lng.value = "";
        frm.lat.value = "";
        frm.num.value = "";

      }
    }
    request.open("POST", "hiroshimaps.php?mode=upd", true);
    request.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
    request.send(data);
  }

}

function msover(td){
//  td.style.background="#CC9966";
}

function msout(td){
//  td.style.background=color;
}

