var icon = new GIcon();
icon.image = 'http://www.myhome-univ.jp/images/marker.png';
icon.shadow = '';
icon.iconSize = new GSize(38, 32);
icon.shadowSize = new GSize(0, 0);
icon.iconAnchor = new GPoint(11, 30);
icon.infoWindowAnchor = new GPoint(19, 1);

var invertIcon = new GIcon();
invertIcon.image = 'http://www.myhome-univ.jp/images/marker2.png';
invertIcon.shadow = '';
invertIcon.iconSize = new GSize(33, 32);
invertIcon.iconAnchor = new GPoint(10, 5);
invertIcon.infoWindowAnchor = new GPoint(24, 15);

Array.prototype.in_array = function(val) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == val) {
			return true;
		}
	}
	return false;
}

// specify id for invertIcon use cases
var invertIconUsers = new Array(
	0,			// do not remove
	2421
);

function showMap(address) {
	if (address) {
		geocoder.getLatLng('日本' + address, convertAddress);
	} else {
		map.setCenter(new GLatLng(35.74874138089811 , 139.7515869140625), 9);
	}
}

function convertAddress(latlng) {
	var prefecture;
	if (document.getElementById('prefecture').type.match(/^select/)) {
		prefecture = document.getElementById('prefecture').options[document.getElementById('prefecture').selectedIndex].value;
	} else {
		prefecture = document.getElementById('prefecture').value;
	}
	var addr = document.getElementById('address').value;
	var cache = geocoder.getCache();

	map.clearOverlays();
	currentMarkers.splice(0, currentMarkers.length);

	if (cache) {
		if (latlng) {
			var zoom = (addr == '') ? 10 : 13;
			map.setCenter(latlng, zoom);

			var rect = map.getBounds();

			gxmlhttp.open('GET', '/scripts/getmarkers.php?sw_lat=' + encodeURI(rect.getSouthWest().lat()) + '&sw_lng=' + encodeURI(rect.getSouthWest().lng())
												+ '&ne_lat=' + encodeURI(rect.getNorthEast().lat()) + '&ne_lng=' + encodeURI(rect.getNorthEast().lng())
							);
			gxmlhttp.onreadystatechange = function() {
				if (gxmlhttp.readyState === 4) {
					var xml = GXml.parse(gxmlhttp.responseText);
					var markers = xml.documentElement.getElementsByTagName('marker');
					for (var i = 0; i < markers.length; i++) {
						var ids = markers[i].getElementsByTagName('id');
						var lats = markers[i].getElementsByTagName('lat');
						var lngs = markers[i].getElementsByTagName('lng');
						var names = markers[i].getElementsByTagName('name');
						var imgs = markers[i].getElementsByTagName('img');

						var id = parseInt(GXml.value(ids[0]));
						var lat = parseFloat(GXml.value(lats[0]));
						var lng = parseFloat(GXml.value(lngs[0]));
						var name = GXml.value(names[0]);
						var img = GXml.value(imgs[0]);

						var marker = createMarker(id, lat, lng, name, img);
						map.addOverlay(marker);
						currentMarkers.push(id);

					}
				}
			}

			gxmlhttp.send('');
		}
	}
}

function moveOrZoom() {
	var cache = geocoder.getCache();

	if (cache) {
		var rect = map.getBounds();

		gxmlhttp.open('GET', '/scripts/getmarkers.php?sw_lat=' + encodeURI(rect.getSouthWest().lat()) + '&sw_lng=' + encodeURI(rect.getSouthWest().lng())
											+ '&ne_lat=' + encodeURI(rect.getNorthEast().lat()) + '&ne_lng=' + encodeURI(rect.getNorthEast().lng())
						);
		gxmlhttp.onreadystatechange = function() {
			if (gxmlhttp.readyState === 4) {
				var xml = GXml.parse(gxmlhttp.responseText);
				var markers = xml.documentElement.getElementsByTagName('marker');
				for (var i = 0; i < markers.length; i++) {
					var ids = markers[i].getElementsByTagName('id');
					var lats = markers[i].getElementsByTagName('lat');
					var lngs = markers[i].getElementsByTagName('lng');
					var names = markers[i].getElementsByTagName('name');
					var imgs = markers[i].getElementsByTagName('img');

					var id = parseInt(GXml.value(ids[0]));
					var lat = parseFloat(GXml.value(lats[0]));
					var lng = parseFloat(GXml.value(lngs[0]));
					var name = GXml.value(names[0]);
					var img = GXml.value(imgs[0]);

					if (!lookupMarker(id)) {
						var marker = createMarker(id, lat, lng, name, img);
						map.addOverlay(marker);
						currentMarkers.push(id);
					}
				}
			}
		}
		gxmlhttp.send('');
	}

}

function createMarker(id, lat, lng, name, img) {
	var marker = null;
	if (invertIconUsers.in_array(id)) {
		marker = new GMarker(new GLatLng(lat, lng), invertIcon);
	} else {
		marker = new GMarker(new GLatLng(lat, lng), icon);
	}
	var html = '<div style="width:280px;margin:5px;"><a href="' + document.location.protocol + '//' + document.location.hostname + '/d/' + id + '/" target="new"><img src="/scripts/thumbimg.php?src=/upimages/agency/' + img + '&amp;w=113&amp;h=85&amp;zc=0" alt="' + name + '" width="113" height="85" border="0" align="left" /></a>'
				+ '<a href="' + document.location.protocol + '//' + document.location.hostname + '/d/' + id + '/" target="new" style="color:#2369ff;font-size:12px;text-decoration:none;">' + name + '</a>'
				+ '<br clear="all" /></div>';
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function lookupMarker(id) {
	for (i = 0; i < currentMarkers.length; i++) {
		if (currentMarkers[i] == id) {
			return true;
		}
	}
	return false;
}
