/* 京口 */
function getDB() {
  if (3 < getDB.arguments.length) return false;
  var stNamae = getDB.arguments[0];
  var param = '';

  if (1 < getDB.arguments.length) {
    param = '&n=' + getDB.arguments[1];
    if (2 < getDB.arguments.length) {
      param = param + '&n2=' + getDB.arguments[2];
      if (3 < getDB.arguments.length) {
        param = param + '&n3=' + getDB.arguments[3];
        if (4 < getDB.arguments.length) {
          param = param + '&n4=' + getDB.arguments[4];
        }
      }
    }
  }

  var stUrl = location.protocol + "//" + location.host + "/ajax" + stNamae + ".php";
  var req = $.ajax({
  type: "POST",
  url: stUrl,
  async: false,
  dataType: "json",
  data: param
  });
  if (!req) return true;
  if (!req.responseText) return true;
  var data = eval('(' + req.responseText + ')');
  return data;
}

function regTable(param, name) {
  var req = $.ajax({
  type: "POST",
  url: "/ajax" + name + ".php",
  async: false,
  data: param
  });
  if (!req) return true;
  if (!req.responseText) return true;
  var d = eval('(' + req.responseText + ')');
  if (d.val != undefined) {
    alert(d.mes);
  }
  return d;
}
function getParam() {
  var param = {};
  var info = $("#fm").serializeArray();
  $(info).each(function (i, v) { param[v.name] = v.value; });

  var par = {};
  par["t"] = $.toJSON(param);
  return par;
}

function chkNum(val, Msg){
  if (isNaN(val)) {
    alert(Msg + "は半角数字を入力してください。") ;
    return false ;
  }
  return true ;
}

function setJuusho(z) {
  if (z == undefined) return;
  var stZip = '';

  for (var i = 0; i < z.length; i++) {
    var c = z.charCodeAt(i);
    if (( c >= 48 ) && ( c <= 57 )) {
      stZip += z.charAt(i);
    } else if (( c >= 65296 ) && ( c <= 65305 )) {
      // Zenkaku number
      stZip += String.fromCharCode(c - 65248);
    }
  }
  if (stZip.length < 7) { return; }
  if (!chkNum(stZip, "郵便番号")) { return; }

  $("#freekeyword").val("");
  var d = getDB('Yuubin', stZip);

  if ($("#address").val() == "") {
    $("#address").val(d["Ken"] + d["Shi"] + d["Chouiki"]);
  } else {
    // check wether txtJuusho and DB is same value.
    var rObj = new RegExp("^" + d["Ken"] + d["Shi"] + d["Chouiki"] + ".*");
    var stNew = $("#address").val();
    if (!stNew.match(rObj)) {
      if (confirm("郵便番号が変わりました．新しい住所(" + d["Ken"] + d["Shi"] + d["Chouiki"] + ")に変更しますか？")) {
        $("#address").val(d["Ken"] + d["Shi"] + d["Chouiki"]);
      }
    }
  }
}

function toHan(str) {
    return str.replace(/[０-９]/g, function(str){return String.fromCharCode(str.charCodeAt(0)-65248);});
}
function delTabRow(id, inRow){
    if (!id) {return null;}
    if (isNaN(inRow)) {return null;}
    $('#' + id + " tr:gt(" + inRow + ")").remove();
}

function subLoc(fLati, fLong) {
  $("#lati").val(fLati);
  $("#long").val(fLong);
  $(":button").removeAttr("disabled");
}

function substLoc() {
  /* geolocation is available */
  if (navigator.geolocation) {
    $(":button").attr("disabled", "disabled");
    navigator.geolocation.getCurrentPosition(function(position) {
      subLoc(position.coords.latitude, position.coords.longitude);
    });
  } else {
    alert("I'm sorry, but geolocation services are not supported by your browser.");
  }
}

function addCustomMarker(map, lng, lat, title, html, image) {
  var image = new google.maps.MarkerImage(image,
                           // This marker is 20 pixels wide by 32 pixels tall.
                           new google.maps.Size(20, 34),
                           // The origin for this image is 0,0.
                           new google.maps.Point(0,0),
             // The anchor for this image is the base of the flagpole at 0,32.
                           new google.maps.Point(10, 34));

  var latlng = new google.maps.LatLng(lat, lng);
  var marker = new google.maps.Marker({
  position: latlng,
  icon: image,
  map: map,
  title: title,
  });
  var bIw = false;
  var infowindow = new google.maps.InfoWindow({
    content: html
  });
  google.maps.event.addListener(marker, 'click', function() {
    if (bIw == true) {
      infowindow.close(map,marker);
      bIw = false;
    } else {
      infowindow.open(map,marker);
      infowindow.setZIndex(1);
      bIw = true;
    }
  });
}

function renewTable(d, len) {
  if (d == null) {return true;}
  $("#rest-table").show();
  $("#rest-map").hide();
  delTabRow('searched-table', 1);

  var inCnt = 1;
  for (var i in d) {
    if (len < inCnt) break;
    addTr(d[i]);
    inCnt++;
  }
}

function addTr(d) {
  var oTr = $('<tr>');
  var url = '';
  if (d.turl != null) {
    url = '<a href="' + d.turl + '" target="_blank">食べログ</a><br>';
  }
  if (d.gurl != null) {
    url += '<a href="' + d.gurl + '" target="_blank">ぐるなび</a><br>';
  }
  if (d.hurl != null) {
    url += '<a href="' + d.hurl + '" target="_blank">Hotpepper</a>';
  }
  oTr.append($('<td>').addClass('nowrap').append($(url)));
  oTr.append($('<td>').append('<a title="' + d.tel + '">' + d.name + '</a>'));
  oTr.append($('<td>').append(d.cate));
  oTr.append($('<td>').addClass('r').append(d.score));
  oTr.append($('<td>').append(d.lunchbudget));
  oTr.append($('<td>').append(d.budget));
  oTr.append($('<td>').append(d.open));
  oTr.append($('<td>').append(d.holiday));
  oTr.append($('<td>').addClass('c').append(d.gcoupon));
  oTr.append($('<td>').addClass('c').append(d.hcoupon));

  $('#searched-table tr:last').after(oTr);
}
function dispLatLng(map){
  var latlng = map.getCenter();
  $('#lati').val(latlng.lat());
  $('#long').val(latlng.lng());
}

function prepMap(inScale, fLati, fLong) {
  var myLatlng = new google.maps.LatLng(fLati, fLong);
  var myOptions = {
  zoom: inScale,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map"), myOptions);
  google.maps.event.addListener(map, "drag", function(latlng) {
    dispLatLng(map);
  });

  return map;
}

function renewMap(map, d, len) {
  if (d == null) {return true;}
  $("#rest-table").hide();
  $("#rest-map").show();

  var inCnt = 1;
  for (var i in d) {
    if (len < inCnt) break;
    addRest(map, d[i]);
    inCnt++;
  }
}

function addRest(map, i) {
  var url = '';
  if (i.turl) {
    url = '<a href="' + i.turl + '" target="_blank">食べログ</a> ';
  }
  if (i.gurl) {
    url += '<a href="' + i.gurl + '" target="_blank">ぐるなび</a> ';
  }
  if (i.hurl) {
    url += '<a href="' + i.hurl + '" target="_blank">Hotpepper</a>';
  }
  var score, lunchbudget, budget;
  if (i.score == undefined || i.score == '') {
    score = '';
  } else {
    score = '<span class="red b">スコア' + i.score + '</span> ';
  }
  if (i.lunchbudget == undefined || i.lunchbudget == '') {
    lunchbudget = '';
  } else {
    lunchbudget = 'ランチ予算 ' + i.lunchbudget;
  }
  if (i.budget == undefined || i.budget == '') {
    budget = '';
  } else {
    budget = ' 予算 ' + i.budget;
  }
  contents = '<span class="balloon">' + i.name + '<br>' + score + i.cate + '<br>' + lunchbudget + budget + '<br>' + url + '</span>';

  if (i.lunchbudget && 3.5 < i.score) {
    addCustomMarker(map, i.long, i.lati, i.name, contents, "image/markerred.png");
  } else if (i.lunchbudget != undefined) {
    addCustomMarker(map, i.long, i.lati, i.name, contents, "image/markerpink.png");
  } else {
    addCustomMarker(map, i.long, i.lati, i.name, contents, "image/markerorange.png");
  }
}

$(function() {
  var startTime;
  var map;
//  map = prepMap(18, 35.68957560616484, 139.69170368220898);
  $("#rest-map").hide();
  
  var stWord = $("#freekeyword").val();
  if (stWord == '') {
    $("#rest-table").hide();
  }

  var fLati = $("#lati").val();
  var fLong = $("#long").val();
  if (fLati != '' && fLong != '') {
    if (isFinite(fLati) && isFinite(fLong)) {
      searchMap();
    }
  }
  
  function startTimer() {
    startTime = new Date();
  }

  function getTime() {
    var currentTime = new Date();
    return (currentTime - startTime) / 1000;
  }

  function searchTable() {
    startTimer();
    var param = getParam();
    if (param == false) { return; }
    param["button"] = "search";
    $(":button").attr("disabled", "disabled");
    var d = regTable(param, 'Search');
    var len = 0;
    for (i in d) {
      len++;
    }
    renewTable(d, d[0].len);
    $(":button").removeAttr("disabled");
    $("#num").text(d[0].len);
    $("#time").text(getTime());
    return;
  }

  function searchMap () {
    startTimer();
    var param = getParam();
    if (param == false) { return; }
    param["button"] = "mapsearch";
    $(":button").attr("disabled", "disabled");
    var d = regTable(param, 'Search');
    $("#num").text(d[0].len);
    if (map == undefined) {
      map = prepMap(d[0].scale, d[0].lati, d[0].long);
    }
    // 中心地
    var locNow = new google.maps.LatLng(d[0].lati, d[0].long);
    map.setCenter(locNow);
    addCustomMarker(map, parseFloat(d[0].long) + 0.00005, parseFloat(d[0].lati) + 0.00005, '検索場所', '<div class="l nowrap"><b>検索場所</b></div>', "image/markerblue.png");
    // 描き直し
    renewMap(map, d, d[0].len);
    $(":button").removeAttr("disabled");
    $("#time").text(getTime());
    return;
  }

  $(window).resize(function(){
    $("#map").width('90%');
  });
  $("#yuubin").keyup(function() {
    var z = toHan($(this).val());
    setJuusho(z);
    return;
  });

  $("#search").click(function(){
    searchTable();
    location.hash='maptop';
  });
  $("#mapsearch").click(function(){
    searchMap();
    location.hash='maptop';
  });
  $("#subst").click(function(){
    substLoc();
  });
  $("#clear").click(function() {
    $("#lati").val('');
    $("#long").val('');
    return;
  });
});

