var gmapSrc = "http://maps.google.com/"
	+"maps?&amp;"
	+"file=api&amp;"
	+"v=2&amp;"
	+"key=ABQIAAAAXDIAzANtYULOcCx6UsnK8xTWJEZr8vn95PnGgjL5hwZTLWs0YhSKobXQ_iofP2KTEqpzu6hfJoszTQ";
//
document.write('<script src="'+gmapSrc+'" type="text\/javascript"\><\/script\>');
//
var map;
var geocoder;
var num;
var area;
var mujiicon;
//
function load(dat, method, file, async){
	var req = window.XMLHttpRequest ? new XMLHttpRequest() : (function() {
		try { return new ActiveXObject("Msxml2.XMLHTTP"); }
		catch(e) { return new ActiveXObject("Microsoft.XMLHTTP"); }
	})();
	req.onreadystatechange = function() {
		if(req.readyState==4 && (req.status == 200 || req.status == 304)) oncompl();
	}
	function oncompl(){
		var stores = eval( "("+req.responseText+")" );
		var hasLatLng = true;
		for(var i=0; i<stores.list.length; i++) if(stores.list[i].latlng) hasLatLng = false;
		if(!hasLatLng) initializeGeocodeCache();
		for(var j=0; j<stores.list.length; j++) showAddress(stores.list[j],j,stores.message);
	}
	req.open(method, file, async);
	req.send(dat);
} 
//
function initializeGeocodeCache(){
	function GMCache(){
		GGeocodeCache.apply(this);
	}
	GMCache.prototype = new GGeocodeCache();
	geocoder=new GClientGeocoder();
	geocoder.setCache(new GMCache());
	geocoder.setBaseCountryCode(area.toLowerCase());
}
//
function showAddress(store,number,message){
	if(store.latlng){
		setMarker(store.latlng,store,number,message);
	}else{
		if(geocoder) geocoder.getLatLng(store.address, function(point){ setMarker(point,store,number,message); } );
	}
}
//
function setMarker(point,store,number,message){
	var flg = (number==num);
	if(!point){
		if(store.address) alert(store.name+" ("+store.address+") is Not Found");
		else alert(store.name+" has wrong latlng");
	}else{
		if(flg) map.setCenter(point,store.zoom || 15);
		var op = {icon:new GIcon(mujiicon)};
		var marker= new GMarker(point,op);
		map.addOverlay(marker);
		var storeName = document.createElement("h3");
		storeName.style.fontSize = "16px";
		storeName.style.fontWeight = "bold";
		storeName.style.lineHeight = "1.5";
		storeName.style.paddingBottom = "5px";
		storeName.innerHTML = store.name;
		var storeCaption = document.createElement("p");
		storeCaption.innerHTML = store.address;
		if(!flg){
			var storeLinkP = document.createElement("p");
			var storeLink = document.createElement("a");
			storeLink.href = store.url;
			storeLink.innerHTML = message;
			storeLinkP.appendChild(storeLink);
		}
		var winContainer = document.createElement("div");
		winContainer.style.width = "300px";
		winContainer.style.padding = "5px 5px 2px 5px";
		winContainer.appendChild(storeName);
		winContainer.appendChild(storeCaption);
		if(!flg) winContainer.appendChild(storeLinkP);
		GEvent.addListener(marker, "click", function() { 
			marker.openInfoWindow(winContainer);
		});
		if(flg) {
			GEvent.trigger(marker,"click");
			map.panBy(new GSize(-32,50));
		}
	}
}
//
function loadMap(_area,_num) {
	area = _area;
	num = _num;
	if(typeof(GBrowserIsCompatible)=="undefined"){
		alert("Unsupported browser.");
	}else if(!GBrowserIsCompatible()){
		alert("Google Maps has not loaded.");
	}else{
		window.onunload = GUnload;
		//
		mujiicon = new GIcon();
		mujiicon.image = "/shared/local/img/marker/32x32_en.png";
		mujiicon.iconSize = new GSize(38, 38);
		mujiicon.iconAnchor = new GPoint(18,18);
		mujiicon.infoWindowAnchor = new GPoint(18,2);
		//
		map = new GMap2(document.getElementById("map"));
		//
		map.clearOverlays();
		map.setCenter(new GLatLng(0,0));
		map.addControl(new GSmallMapControl());
		load(null, "get", "/shared/local/js/stores/"+area+".js", true);
	}
}