//<![CDATA[
var infoHtml = '';
var baseIcon;
var gmarkerArray = [];
var htmlArray = [];
var map;
var isInit = false, isCenter = false, clickMove = false;
var bufMove = 0.0001;
var bakLat = 0, bakLng = 0;
var nameSpace = 'ax21';
var scriptUrl = '/axis2/services/ClinicSearchService/geoSearch';
var funcInterval = 1000;
var map2;
function init() {
	var geocoder = new GClientGeocoder();

	if (GBrowserIsCompatible()) {
		baseIcon = new GIcon();
		baseIcon.shadow = 'http://www.google.com/mapfiles/shadow50.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);

		map = new GMap2(document.getElementById('map'));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl(true));
//		map.setCenter(new GLatLng(35.687278, 139.72), 14);

		// init point
		geocoder.getLatLng(
			$F('spoint'),
			function(point) {
				if (point) {
					map.setCenter(point, 14);
					isCenter = true;
				} else {
					alert("住所が見つかりませんでした。");
					history.back();
				}
			}
		);

		// gmap other option
		map.enableScrollWheelZoom();
		map.addControl(new GScaleControl());
//		map.disableDragging();
//		map.addControl(new GOverviewMapControl());

		writeLatLng(0, 0);

		addEvent();

		Event.observe($('range'), 'change', writeLatLng, false);
	}
}
function init2() {
	var f = window.parent.document;
	var lat = f.getElementsByName('lat').item(0).value;
	var lon = f.getElementsByName('lon').item(0).value;
	var geocoder = new GClientGeocoder();

	if (GBrowserIsCompatible()) {
		if (!map2) {
			map2 = new GMap2(document.getElementById('map'));
			map2.addControl(new GLargeMapControl());
			map2.addControl(new GMapTypeControl(true));
			map2.addControl(new GOverviewMapControl());
			map2.setCenter(new GLatLng(lat, lon), 14);
		} else {
			map2.clearOverlays();
		}
		setTimeout("setMarkerPos(" + lat + "," + lon + ")", 1000);
	}
}
function setMarkerPos(lat, lon) {
	var icon = new GIcon();
	icon.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(37, 34);
	icon.iconAnchor = new GPoint(9, 34);
	icon.infoWindowAnchor = new GPoint(9, 2);
	icon.infoShadowAnchor = new GPoint(18, 25);
	icon.image = "http://www.google.com/mapfiles/marker.png";

	var marker = new GMarker(new GLatLng(lat, lon), icon);
	map2.addOverlay(marker);
	map2.setCenter(marker.getPoint(), 14);

	// gmap other option
	map2.enableScrollWheelZoom();
	map2.addControl(new GScaleControl());
}
function writeLatLng(lat, lng) {
	if (isCenter == true) {
		if (!lat || !lng) {
			lat = map.getCenter().y;
			lng = map.getCenter().x;
		}
		var opt = 'lat=' + lat + '&lng=' + lng + '&range=' + $F('range') + '&key=' + $F('key');
		var ajax = new Ajax.Request(
			scriptUrl,
			{
				method: 'get',
				parameters: opt,
				onSuccess: showResponse,
				onFailure: getError
			}
		);
	} else {
		setTimeout('writeLatLng(0, 0)', funcInterval);
	}
}
function showResponse(request) {
	var clinicList = xml2ary(request.responseXML);

	if (clinicList.length > 0) {
		infoHtml = '';
		removeMarker();
		for (var i = 0; i < clinicList.length; i++)
			createInfo(i, clinicList[i]);
	} else if (isInit == false) {
		$('info').innerHTML = 'Not Found.';
		isInit = true;
	}
}
function getError(request) {
	$('info').innerHTML = 'Not Found.';
	removeMarker();
}
function removeMarker() {
	map.clearOverlays();
	gmarkerArray = [];
}
function getNamespace(name){
	if (nameSpace != '') {
		return nameSpace + ':' + name;
	}
	return name;
}
function xml2ary(xmldoc) {
	var names = xmldoc.getElementsByTagName(getNamespace('name'));
	var zipCodes = xmldoc.getElementsByTagName(getNamespace('zipCode'));
	var addresss = xmldoc.getElementsByTagName(getNamespace('address'));
	var tels = xmldoc.getElementsByTagName(getNamespace('tel'));
	var faxs = xmldoc.getElementsByTagName(getNamespace('fax'));
	var lats = xmldoc.getElementsByTagName(getNamespace('lat'));
	var lngs = xmldoc.getElementsByTagName(getNamespace('lng'));
	var urls = xmldoc.getElementsByTagName(getNamespace('url'));

	var clinicList = [];

	for (var i = 0 ; i < names.length; i++) {
		clinicList.push(
			new Clinic(
				lats[i].childNodes[0].nodeValue,
				lngs[i].childNodes[0].nodeValue,
				names[i].childNodes[0].nodeValue,
				zipCodes[i].childNodes[0].nodeValue,
				addresss[i].childNodes[0].nodeValue,
				tels[i].childNodes[0].nodeValue,
				faxs[i].childNodes[0].nodeValue,
				urls[i].childNodes[0].nodeValue
			)
		);
	}
	return clinicList;
}
function addEvent() {
	if (isInit && map) {
		GEvent.addListener(
			map,
			'moveend',
			function() {
				if (!clickMove &&
					((
						(bakLat + bufMove < map.getCenter().y) || (bakLat - bufMove > map.getCenter().y)
					) || (
						(bakLng + bufMove < map.getCenter().x) || (bakLng - bufMove > map.getCenter().x)
					))
				) {
					$('info').innerHTML = '<img src="images/loader.gif" alt="Loading..."/>';
					writeLatLng(map.getCenter().y, map.getCenter().x);
					bakLat = map.getCenter().y;
					bakLng = map.getCenter().x;
				}
				clickMove = false;
			}
		);
	} else {
		setTimeout('addEvent()', funcInterval);
	}
}
function createInfo(index, clinic) {
	var geocoder = new GClientGeocoder();

	var marker = createMarker(index, clinic);
	if (!isInit) {
		isInit = true;
	}
	map.addOverlay(marker);
	$("info").innerHTML =
		'<table cellpadding="0px" cellspacing="0px" class="info">' + infoHtml + '</table>';
}
function createMarker(index, clinic) {
	var html;

	if (clinic._url != '') {
		html = '<a href="' + clinic._url + '" target="_top">' + clinic._name + '</a>';
	} else {
		html = clinic._name;
	}
	html +=
		'<br/><br/>〒'
		 + clinic._zipCode
		 + '<br/>'
		 + clinic._address
		 + '<br/><br/>TEL:'
		 + clinic._tel
		 + '&nbsp;&nbsp;FAX:'
		 + clinic._fax + '';

	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	var icon = new GIcon(baseIcon);
	icon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
	var marker = new GMarker(clinic._point, icon);
	GEvent.addListener(
		marker,
		'click',
		function() {
			clickMove = true;
			marker.openInfoWindowHtml(
				'<div style="font-size:9pt;white-space:nowrap;">' + html + '</div>',
				'"Marker <b>" + letter + "</b>"'
			);
		}
	);
	gmarkerArray[index] = marker;
	htmlArray[index] = html;
	if (infoHtml != '') {
		infoHtml += '<tr><td style="height:8px;"></td></tr>'
	}
	infoHtml +=
		'<tr><td class="info"><a href="javascript:markerClick(' + index + ')">'
		+ letter + "." + clinic._name + '</a></td></tr>'
		+ '<tr><td class="info">〒'
			+ clinic._zipCode
		+ '</td></tr>'
		+ '<tr><td class="info" style="padding:0px 0px 0px 12px;">'
			+ clinic._address
		+ '</td></tr>'
		+ '<tr><td class="info" style="padding:0px 0px 0px 24px;">TEL：'
			+ clinic._tel
			+ '&nbsp;FAX:'
			+ clinic._fax
		+ '</td></tr>';
	return marker;
}
function markerClick(i) {
	clickMove = true;
	gmarkerArray[i].openInfoWindowHtml(
		'<div style="font-size:9pt;white-space:nowrap;">' + htmlArray[i] + '</div>'
	);
}
function Adentro(i) {
	map.setCenter(gmarkerArray[i].point, 17);
}
function Fuera(i) {
	map.setCenter(gmarkerArray[i].point, 12);
}
function Clinic(lat, lng, name, zipCode, address, tel, fax, url) {
	this._point = new GLatLng(lat, lng);
	this._name = name;
	this._zipCode = zipCode;
	this._address = address;
	this._tel = tel;
	this._fax = fax;
	if (url != 'none')
		this._url = url;
	else
		this._url = '';
}
var sel_location = null ;
function openMapWindow(lat, lon) {
	$('lat').value = lat;
	$('lon').value = lon;
	if(sel_location == null) {
		var x = 20;
		var y = 20;
		var w = 600;
		var h = 400;
		// Windows with an URL as content
		sel_location = new Window(
			'dialog',
			{
				className: "darkX", title: "GoogleMap",
				left:x, top:y, width:w, height:h,
				resizable: false, maximizable: false, url: "/contents/map.html"
			}
		);
	} else {
		sel_location.setURL("/contents/map.html");
		sel_location.show();
	}
	sel_location.showCenter();
	sel_location.show();
}
//]]>
