var map = null;
var _charCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var markerCount = 0;

function geom_load() {
    if(typeof(GIcon) == 'undefined'){
	alert("GoogleMapの初期化が不完全です。この問題は、ブラウザのキャッシュを削除すると解決する可能性があります。");
	return;
    }	
    baseIcon = new GIcon();
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.image = "http://www.google.com/mapfiles/marker.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);

    centerIcon = new GIcon();
    centerIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    centerIcon.image = "http://www.google.com/mapfiles/marker.png";
    centerIcon.iconSize = new GSize(30, 51);
    centerIcon.shadowSize = new GSize(56, 51);
    centerIcon.iconAnchor = new GPoint(9, 34);
    centerIcon.infoWindowAnchor = new GPoint(9, 2);
    centerIcon.infoShadowAnchor = new GPoint(18, 25);

    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("geom_map"));
	create_cross_icon(); 
        map.setCenter(new GLatLng(center_lat, center_lng), zoom_level);
        map.addControl(new GLargeMapControl());
	GEvent.addListener(map, "moveend", search);
        GEvent.addListener(map, "move", function(){
            var x = (map.getCenter()).lng();
            var y = (map.getCenter()).lat();
            document.getElementById("centerPoint").innerHTML = "W:"+x+"  N:"+y;
         });
    }
    search();
}

function create_cross_icon() {
  //cross_px：十字の横幅・縦幅（ピクセル）
  //cross_td：十字の太さ（ピクセル）
  //cross_cr：十字の色（スタイルシートと同様の書式）
  var cross_px = 60;
  var cross_td = 2;
  var cross_cr = "red";

  //十字の縦線のエレメントを設定    
  var cross_h_emt =  document.createElement("div");
  //IE用にfontSizeを最小値
  cross_h_emt.style.fontSize = "1px";
  cross_h_emt.style.margin = "0px";
  cross_h_emt.style.padding = "0px";
  cross_h_emt.style.width = cross_px + "px";
  cross_h_emt.style.height = cross_td + "px";
  cross_h_emt.style.backgroundColor = cross_cr;

  //十字の横線のエレメントを設定
  var cross_v_emt =  document.createElement("div");
  cross_v_emt.style.margin = "0px";
  cross_v_emt.style.padding = "0px";
  cross_v_emt.style.width = cross_td+"px";
  cross_v_emt.style.height = cross_px + "px";
  cross_v_emt.style.backgroundColor = cross_cr;

  //十字（縦・横線）の位置を計算
  var MapPX = map.getSize();
  var mycenterHX = MapPX.width  / 2 - cross_px / 2;
  var mycenterHY = MapPX.height / 2 - cross_td / 2;
  var mycenterVX = MapPX.width  / 2 - cross_td / 2;
  var mycenterVY = MapPX.height / 2 - cross_px / 2;

  var mycenter_H = new GSize(mycenterHX,mycenterHY);
  var myposH = new GControlPosition(G_ANCHOR_TOP_LEFT, mycenter_H);
  myposH.apply(cross_h_emt);
  map.getContainer().appendChild(cross_h_emt); 

  var mycenter_V = new GSize(mycenterVX,mycenterVY);
  var myposV = new GControlPosition(G_ANCHOR_TOP_LEFT, mycenter_V);
  myposV.apply(cross_v_emt); 
  map.getContainer().appendChild(cross_v_emt);
}


function search() {
    map.clearOverlays();
    $('info2').innerHTML = "";
    markerCount = 0;

    var url = geom_settings.urlbase +'v1/search_contents/?callback=showResponseTree';
    var lat = map.getCenter().lat();
    var lng = map.getCenter().lng();
    var limit = parseInt($F('limit'));
    var urimatch = $F('blogSelect');
    var target = $F('target');
    var attribute = "";

    if (isNaN(limit == NaN)) { limit = 10; }
    url = url + "&lng=" + lng + "&lat=" + lat + "&limit=" + limit;
    var distance = Math.round(100 * 1000 * map.getBounds().toSpan().lat() / 2);
    url = url + "&distance=" + distance;
    url = url + "&mask=bodytext";
    url = url + "&mesh=5,5";

    if (urimatch) {
	url = url + "&urimatch=" + urimatch;
    }
    if (target) {
	url = url + "&target=" + target;
    }
    if (attribute != "") {
        url = url + "&attribute=" + attribute;
    }

    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    document.body.appendChild(script);
}

function openTreeWindow(uri){
    window.open(uri, 'neighborblogTree');
}

function showResponseTree(hash) {
    d = new dTree('d');
    var last_latlng = '';
    var ptree_id = 0;
    var dtree_id = 0;
    d.add(dtree_id++, -1, 'ブログエントリ');
    var results = hash.results;
    for (var i = 0; element = results[i]; i++) {
        if(last_latlng != (element.lat+","+element.lng)){
            last_latlng = element.lat+","+element.lng;

            var icon = new GIcon(baseIcon);
            var letter = _charCode.charAt( markerCount );
            if( markerCount > 25 ){
              markerCount = 0;
            }else{
              markerCount ++;
            }
            icon.image = "http://www.google.com/mapfiles/marker"+letter+".png";
            var marker = new GMarker(new GLatLng(element.lat, element.lng),
             { icon:icon,
               draggable:true
             });
            map.addOverlay(marker);
  
            d.add(dtree_id, 0, element.expression + ' ' + last_latlng, 'javascript:map.setCenter(new GLatLng('+last_latlng+'));', null, null, icon.image, icon.image);
            ptree_id = dtree_id++;
        }
        d.add(dtree_id++, ptree_id, element.title+"("+element.attribute+")", 'javascript:openTreeWindow(\''+element.uri+'\');');
    }

    d.closeAll();
    $('info2').innerHTML = d.toString();
    if(ptree_id > 0){
      d.openTo(1,true);
    }
}


function info() {
    var latLng = map.getBounds().toSpan();
    $('info2').innerHTML = "lat = " + latLng.lat() + " lng = " + latLng.lng() + "<br>";
    $('info2').innerHTML += "center = " + map.getCenter() + "<br>";
}

function mapMove(){
    var mx = document.getElementById("mapX").value;
    var my = document.getElementById("mapY").value;
    var mz = document.getElementById("mapZ").value;
    map.setCenter( new GLatLng( my, mx ), parseInt(mz) );
}

function mapMove2(){
    var mx = document.getElementById("mapX2").value;
    var my = document.getElementById("mapY2").value;
    var mz = document.getElementById("mapZ2").value;
    map.setCenter( new GLatLng( my, mx ), parseInt(mz) );
}

function mapMove3(){
    var mx = document.getElementById("mapX3").value;
    var my = document.getElementById("mapY3").value;
    var mz = document.getElementById("mapZ3").value;
    map.setCenter( new GLatLng( my, mx ), parseInt(mz) );
}
