//var geocoder = new GClientGeocoder();
var map_objects = new Array();
var map_id;
var geocode_text;
var maps_selected = new Array();
var pref_id;
var addr_id;


function result_geocode(request){
	var xmlDoc = request.responseXML;
	var root = xmlDoc.documentElement;
	var count = root.getAttribute("count");
	var rows = root.getAttribute("rows");
	var prev = root.getAttribute("prev");
	var next = root.getAttribute("next");
	
	
	var result = xmlDoc.documentElement.getElementsByTagName("data");

	var elm = document.getElementById(map_id+"_maps_info");

	var html="";
	if(result.length==0){
		html='<div class="maps_info_data"><div class="maps_info_address">みつかりませんでした</div></div>';
	}
	if(prev!=-1){
		var href='javascript:geocoding(&quot;'+map_id+'&quot;,&quot;'+geocode_text+'&quot;,'+prev+');';
		var title="&lt;&lt;前の"+rows+"件・・・";
		html = html + '<div class="maps_info_data"><div class="maps_info_title"><a href="'+href+'">'+title+'</a></div></div>';
	}
	
	for(var i=0;i<result.length;i++){
		var title = result[i].getAttribute("title");
		var address = result[i].getAttribute("address");
		var latitude = result[i].getAttribute("latitude");
		var longitude = result[i].getAttribute("longitude");
		html = html + '<div class="maps_info_data">';
			html = html + '<div class="maps_info_title">';
				html = html + '<a id="'+map_id+"_"+i+'" href="javascript:thispointaddr(&quot;'+map_id+'&quot;,'+latitude+','+longitude+',&quot;'+title+'&quot;,&quot;'+address+'&quot;);" onmouseover="maps_select('+i+',&quot;'+map_id+'&quot;,'+latitude+','+longitude+',&quot;'+title+'&quot;,&quot;'+address+'&quot;);">'+title+'</a></div>';
				html = html + '<div class="maps_info_address">'+address+'</div>';
			html = html + '</div>';
		html = html + '</div>';
	}
	if(next!=-1){
		var href='javascript:geocoding(&quot;'+map_id+'&quot;,&quot;'+geocode_text+'&quot;,'+next+');';
		var title="&gt;&gt;次の"+rows+"件・・・";
		html = html + '<div class="maps_info_data"><div class="maps_info_title"><a href="'+href+'">'+title+'</a></div></div>';
	}
	elm.innerHTML=html;
	if(result.length>0){
		var type = result[0].getAttribute("type");
		var category = result[0].getAttribute("category");
		var title = result[0].getAttribute("title");
		var address = result[0].getAttribute("address");
		var latitude = result[0].getAttribute("latitude");
		var longitude = result[0].getAttribute("longitude");
		maps_select(0,map_id,latitude,longitude,title,address,type,category);
	}

}

function maps_select(no,mid,lat,lon,title,addr,type,category){
	var elm = document.getElementById(mid+"_"+no);
	var celm = maps_selected[mid];
	if(celm){
		celm.style.fontWeight="";
	}
	elm.style.fontWeight="bold";
	maps_selected[mid] = elm;

	maps_center(mid,lat,lon);

	var elm_type = document.getElementById(mid+"_maps_type");
	var elm_category = document.getElementById(mid+"_maps_category");
	var elm_title = document.getElementById(mid+"_maps_title");
	var elm_address = document.getElementById(mid+"_maps_address");
	var elm_latitude = document.getElementById(mid+"_maps_latitude");
	var elm_longitude = document.getElementById(mid+"_maps_longitude");
	elm_type.value = type;
	elm_category.value = category;
	elm_title.value = title;
	elm_address.value = addr;
	elm_latitude.value = lat;
	elm_longitude.value = lon;

}
function maps_center(mid,lat,lon){

	var map_obj = map_objects[mid];
	var point = new GLatLng(
		lat,lon
	);
	map_obj.clearOverlays();
	var marker = new GMarker(point);
	map_obj.addOverlay(marker);
	map_obj.setCenter(point, 12);
}

function geocoding(_map_id,text,pos) {

	map_id = _map_id;
	geocode_text = text;
	var map_obj = map_objects[map_id];
	var elm = document.getElementById(text);
	var address = elm.value;

	var elm = document.getElementById(map_id+"_maps_info");
	elm.innerHTML='<div class="maps_info_data">検索中です・・・・</div>';

	var sendtext = "&q="+address+"&pos="+pos;
	sendRequest(result_geocode,sendtext,'POST','/common/process/geocode.do',true,true);
	
}

function result_zipcoding(request){
	var xmlDoc = request.responseXML;
	var root = xmlDoc.documentElement;
	var count = root.getAttribute("count");
	var rows = root.getAttribute("rows");
	var prev = root.getAttribute("prev");
	var next = root.getAttribute("next");
	
	
	var result = xmlDoc.documentElement.getElementsByTagName("data");

	var elm = document.getElementById(map_id+"");

	var html="";
	if(result.length==0){
		html='<div class="maps_info_data"><div class="maps_info_address">みつかりませんでした</div></div>';
	}else{
	}
	
	for(var i=0;i<result.length;i++){
		var title = result[i].getAttribute("title");
		var address = result[i].getAttribute("address");
		var pref = result[i].getAttribute("pref");
		var address1 = result[i].getAttribute("address1");
		if(result.length==1){
			zip_select(pref_id,addr_id,title,address,pref,address1);
			html='<div class="maps_info_data"><div class="maps_info_address">該当する住所がみつかりました</div></div>';
		}else{
			html = html + '<div class="maps_info_data"><div class="maps_info_title"><a id="'+map_id+"_"+i+'" href="javascript:zip_select(&quot;'+pref_id+'&quot;,&quot;'+addr_id+'&quot;,&quot;'+title+'&quot;,&quot;'+address+'&quot;,&quot;'+pref+'&quot;,&quot;'+address1+'&quot;);">'+title+'</a></div><div class="maps_info_address">'+address+'</div></div>';
		}
	}
	elm.innerHTML=html;

}

function zip_select(id_pref,id_addr,title,addr,pref,addr1){

	var elm_pref = document.getElementById(id_pref);
	var elm_addr = document.getElementById(id_addr);
	elm_pref.value=pref;
	elm_addr.value=addr1;

}

function zipcoding(id,id_zip1,id_zip2,id_pref,id_addr1) {

	map_id = id;
	pref_id = id_pref;
	addr_id = id_addr1;

	var elm = document.getElementById(id);
	var elm1 = document.getElementById(id_zip1);
	var elm2 = document.getElementById(id_zip2);
	var zip = elm1.value+elm2.value;

	elm.innerHTML='<div class="maps_info_data">検索中です・・・・</div>';

	var sendtext = "&q="+zip+"&m=1";
	sendRequest(result_zipcoding,sendtext,'POST','/common/process/geocode.do',true,true);
}


function result_move_map(request){
	var xmlDoc = request.responseXML;
	var root = xmlDoc.documentElement;
	var count = root.getAttribute("count");
	var rows = root.getAttribute("rows");
	var prev = root.getAttribute("prev");
	var next = root.getAttribute("next");
	
	
	var result = xmlDoc.documentElement.getElementsByTagName("data");

	var elm = document.getElementById(map_id+"_maps_geo");
	var elmpos = document.getElementById(map_id+"_maps_pos");

	var html="";
	var htmlpos="";
	if(result.length==0){
		html='<div class="maps_info_data"><div class="maps_info_address">みつかりませんでした</div></div>';
	}
	var map_obj = map_objects[map_id];
	var center = map_obj.getCenter();
	
	var elm_type = document.getElementById(map_id+"_maps_type");
	var elm_category = document.getElementById(map_id+"_maps_category");
	var elm_title = document.getElementById(map_id+"_maps_title");
	var elm_address = document.getElementById(map_id+"_maps_address");
//		var elm_latitude = document.getElementById(map_id+"_maps_latitude");
//		var elm_longitude = document.getElementById(map_id+"_maps_longitude");

	if(result.length>0){
		var i=0;
		//for(var i=0;i<result.length;i++){
			var type = result[i].getAttribute("type");
			var category = result[i].getAttribute("category");
			var title = result[i].getAttribute("title");
			var address = result[i].getAttribute("address");
			var latitude = result[i].getAttribute("latitude");
			var longitude = result[i].getAttribute("longitude");
			html = html + '<div class="maps_info_data"><div class="maps_info_title2">現在地：'+title+'</div></div>';
			htmlpos = htmlpos + '<div class="maps_info_data"><div class="maps_info_address">'+address+'('+center.lat()+'-'+center.lng()+')'+'</div></div>';

			elm_type.value = type;
			elm_category.value = category;
			elm_title.value = title;
			elm_address.value = address;
	//		elm_latitude.value = latitude;
	//		elm_longitude.value = longitude;

		//}
	}else{
		elm_type.value = "";
		elm_category.value = "";
		elm_title.value = "";
		elm_address.value = "";
	}
	elm.innerHTML=html;
	elmpos.innerHTML=htmlpos;

}

function maps_maptypechanged(id){
	var map_obj = map_objects[id];
	var tp = map_obj.getCurrentMapType().getName();
	var mt=0;
	if(tp==G_NORMAL_MAP.getName()){
		mt=0;
	}else if(tp==G_SATELLITE_MAP.getName()){
		mt=1;
	}else if(tp==G_HYBRID_MAP.getName()){
		mt=2;
	}else if(tp==G_PHYSICAL_MAP.getName()){
		mt=3;
	}
	var elm_maptype = document.getElementById(id+"_maps_maptype");
	elm_maptype.value = mt;
}

function move_map(id,lat,lon){
	map_id = id;
	var elm = document.getElementById(id+"_maps_geo");
	elm.innerHTML='<div class="maps_info_data"><div class="maps_info_title2">検索中です・・・・</div>';
	
	var point = new GLatLng(lat,lon);
	var map_obj = map_objects[map_id];
	map_obj.clearOverlays();
	var marker = new GMarker(point);
	map_obj.addOverlay(marker);
	
	var elm_latitude = document.getElementById(map_id+"_maps_latitude");
	var elm_longitude = document.getElementById(map_id+"_maps_longitude");
	var elm_zoom = document.getElementById(map_id+"_maps_zoom");
	elm_latitude.value = lat;
	elm_longitude.value = lon;
	elm_zoom.value = map_obj.getZoom();


	var latlon = lat+"_"+lon;

	var sendtext = "&q="+latlon+"&m=2";
	sendRequest(result_move_map,sendtext,'POST','/common/process/geocode.do',true,true);

}

function thispointaddr(id,latitude,longitude,title,address){
	var map = document.getElementById(id+"_maps_geo");

//	var elm_address = document.getElementById(map_id+"_maps_address");
//	var cpoint = map.getCenter();
	pointselectaddr(0,'','',address,"","",title,per2long(latitude),per2long(longitude),-1);
}

function thispoint(id,latitude,longitude,title,address){
	var map = document.getElementById(id+"_maps_geo");

	var elm_address = document.getElementById(map_id+"_maps_address");
	var cpoint = map.getCenter();
	pointselectaddr(0,'','',elm_address.value,"","",'',per2long(cpoint.lat()),per2long(cpoint.lng()),-1);
}

function pointselectaddr(pointno,zip1,zip2,pref,addr1,addr2,landmark,latitude,longitude,key){
	var opn = opener;
	if(!opn)opn=window;
	if(opn.document.getElementById("map"+key)){
		opn.moveAtLatLng(getper(latitude),getper(longitude),6,key);
	}
	if(opn.document.getElementById("zip1")){
	
		var a = per2do(getper(latitude));
		var b = per2do(getper(longitude));
		var per = do2per(a[0],a[1],a[2]);
		
	
		opn.document.getElementById("zip1").value=zip1;
		opn.document.getElementById("zip2").value=zip2;
		opn.document.getElementById("pref").value=pref;
		opn.document.getElementById("addr1").value=addr1;
		opn.document.getElementById("addr2").value=addr2;
		opn.document.getElementById("landmark").value=landmark;
		opn.document.getElementById("latitude").value=latitude;
		opn.document.getElementById("longitude").value=longitude;

		if(opn.document.getElementById("label1")){
			opn.document.getElementById("label1").innerHTML="住所:"+pref+addr1+addr2;
			opn.document.getElementById("label2").innerHTML="緯度:"+getdo(a);
			opn.document.getElementById("label3").innerHTML="経度:"+getdo(b);
		}
		if(opn.document.getElementById("pointreset")){
			opn.document.getElementById("pointreset").style.visibility="visible";
			opn.document.getElementById("pointreset").innerHTML="未設定にする";
		}
	}
	if(opn!=window){
		close();
	}
}

function do2per(_do,fun,byo){
	return Math.round((_do+(fun*60 + byo) * 1000 / 3600000)*1000000) / 1000000;
}

function getdo(a){
	return a[0]+"度"+a[1]+"分"+a[2]+"秒";
}

function getper(per){
	return per/1000000;
}

function per2long(per){
	return per*1000000;
}

function per2do(per){
	var _do = Math.floor(per);
	var fun = Math.floor((per - _do) * 60);
	var byo = Math.round(((per - _do - fun/60) * 3600)*1000)/1000;
	
	var a = new Array();
	a[0] = _do;
	a[1] = fun;
	a[2] = byo;
	
	
	return a;
}

function test(){


	var map_obj = map_objects[map_id];
	var elm = document.getElementById(text);
	var address = elm.value;

	geocoder.setBaseCountryCode("jp");
	geocoder.getLocations(address,
		function addAddressToMap(response) {
			map_obj.clearOverlays();
			if (!response || response.Status.code != 200) {
				alert("住所の場所を特定できませんでした。");
			} else {
				alert(response.name);
				for(var i=0;i<response.Placemark.length;i++){
					place = response.Placemark[i];
					point = new GLatLng(
						place.Point.coordinates[1],
						place.Point.coordinates[0]
					);
					map_obj.setCenter(point, 15);
					marker = new GMarker(point);
					map_obj.addOverlay(marker);
					marker.openInfoWindowHtml(place.address + '<br>' +
					'<b>国コード:</b> ' + place.AddressDetails.Country.CountryNameCode + '<br>' +
					'<b>国コード:</b> ' + place.AddressDetails.Country.AdministrativeArea + '<br>' +
					''
					);
				}
			}
		}
	);
/*
	geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
				alert(address + " not found");
			}else{
				map_obj.setCenter(point, 13);
				var marker = new GMarker(point);
				map_obj.addOverlay(marker);
//				marker.openInfoWindowHtml(address);
			}
		}
	);
	*/
}
