/**
 * Yahoo!災害情報API呼び出しクラス
 */
function DisasterControl(map, func){
	function formatDateString(dateString,formatPattern,maeZero){
		if(dateString.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\+(\d{2}):(\d{2})/)){
			var yyyy = RegExp.$1;
			var MM = RegExp.$2;
			var dd = RegExp.$3;
			var HH = RegExp.$4;
			var mm = RegExp.$5;
			var ss = RegExp.$6;
			if(maeZero){
				// 簡易前ゼロ処理
				MM = MM.replace(/^0/," ");
				dd = dd.replace(/^0/," ");
				HH = HH.replace(/^0/," ");
			}
			return formatPattern.replace("yyyy",yyyy)
								.replace("MM",MM)
								.replace("dd",dd)
								.replace("HH",HH)
								.replace("mm",mm)
								.replace("ss",ss);
		}
		return "";
	};
	function hankakuToZenkaku(str){
	return str.replace("0","０")
			.replace("1","１")
			.replace("2","２")
			.replace("3","３")
			.replace("4","４")
			.replace("5","５")
			.replace("6","６")
			.replace("7","７")
			.replace("8","８")
			.replace("9","９");
	};

	// 設定系変数
	var targetId = "Disaster";
	var target = document.getElementById(targetId);
	if(!target)return;

	// ジオコード用正規表現作成
	var prefRegExp=new RegExp("^("+DisasterControl.prefArray.join("|")+")(.*)");

	// loading画像キャッシュしとく
	new Image().src="/f/mapion/img/bg_loading_bgtp.gif";

	var init = true;

	var tmplFunc=null;
	var block=false;
	var s = new MAPION.net.HTTPService()
	.setURL("/m/35_139_0/?t=disaster_info_map&cb=?&nocache={nocache}")
	.setContext({
		nocache:function(){return new Date().getTime()}
	})
	.setParameterForInvoker("charset","utf-8")
	.setParameterForInvoker("timeOutMS",5000)
	.filter(function (value){
		value.isTwitter=false;
		value.twitterLink="";
		value.showTwitterFunction="";
		if(value.earthquake||value.tsunami){
			value.hasInfo = true;
			var epicenterAreaName = null;
			if(value.earthquake){
				var info = value.earthquake;
				info.refTime = formatDateString(info.refTime,"yyyy/MM/dd HH:mm");
				info.observationTime = formatDateString(info.observationTime,"MM月dd日 HH時mm分",true);
				info.MaxSeismicIntensity = hankakuToZenkaku(info.MaxSeismicIntensity);
				epicenterAreaName = info.epicenterAreaName;
			};
			if(value.tsunami){
				var info = value.tsunami;
				info.refTime = formatDateString(info.refTime,"yyyy/MM/dd HH:mm");
			};
			if(epicenterAreaName&&epicenterAreaName.match(prefRegExp)){
				var prefName = RegExp.$1;
				var rest = RegExp.$2;
				var item = DisasterControl.prefInfo[prefName];
				if(item){
					var lon = +item.lon;
					var lat = +item.lat;
					var aStartTag='<a href="javascript:void(0);" onclick="DisasterControl.mapMove('+lon+','+lat+');return false;">';
					var aEndTag='</a>';
					value.earthquake.epicenterAreaName=aStartTag+prefName+aEndTag+rest;
					value.showTwitterFunction="DisasterControl.moveAndTwitter("+lon+","+lat+");return false;";
					value.isTwitter=true;
					value.twitterLink=DisasterControl.getTwitterLink(value.earthquake.category,lon,lat,epicenterAreaName,prefName,value.earthquake);
				};
			};
			doTemplate(value);
			func.call(this, { isDisaster:true });
		}else{
			func.call(this, { isDisaster:false });
			if(init)return;
			value.hasInfo = false;
			doTemplate(value);
		};
	})
	.fire();

	function doTemplate(value){
		// 最後のデータ処理
		value.refreshFunction = "DisasterControl.refresh();return false;"
		value.openFunction = "DisasterControl.openWidget();return false;"
		value.closeFunction = "DisasterControl.closeWidget();return false;"
		if(!tmplFunc){
			var helper = new MAPION.tmpl.TemplateHelper(MAPION.tmpl.Template.jsmf);
			helper.addEventListener("onload",function(event){
				tmplFunc = event.templateFunction;
				try{
					target.innerHTML = tmplFunc(value);
				}catch(e){}
				block=false;
				DisasterControl.openBtn = null;
				DisasterControl.infoArea = null;
				init=false;
			});
			helper.compileWithURL("/f/mapion/html/template/mapwidget/disaster.html?nocache="+new Date().getTime());
		}else{
			target.innerHTML = tmplFunc(value);
			block=false;
			DisasterControl.openBtn = null;
			DisasterControl.infoArea = null;
			init=false;
		};
	};

	DisasterControl.moveAndTwitter=function(lon,lat){
		if(block)return;
		var twitterBtnId = "gnr_twitter";
		var twitterBtn = document.getElementById(twitterBtnId);
		var p = new MPoint(lon,lat);
		map.centerAndZoom(p,3); // 縮尺は1/30万
		twitterBtn.onclick({});
	};

	/**
	 * 地図移動用関数
	 */
	DisasterControl.mapMove=function(lon,lat){
		if(block)return;
		var p = new MPoint(lon,lat);
		map.centerAndZoom(p,3); // 縮尺は1/30万
	};

	/**
	 * 再読み込み用関数
	 */
	DisasterControl.refresh=function(){
		if(block)return;
		block=true;
		var btn = document.getElementById("refreshBtn");
		if(btn){
			btn.src="/f/mapion/img/bg_loading_bgtp.gif";
			btn.style.marginRight = "10px";
		};
		s.fire();
	};

	DisasterControl.openBtn = null;
	DisasterControl.infoArea = null;
	function setElement(){
		if(DisasterControl.openBtn&&DisasterControl.infoArea)return;
		DisasterControl.openBtn = document.getElementById("DisasterBtn");
		DisasterControl.infoArea = document.getElementById("DisasterInfo");
	};

	/**
	 * ウィジッドオープン関数
	 */
	DisasterControl.openWidget=function(){
		setElement();
		DisasterControl.infoArea.style.display = "block";
		DisasterControl.openBtn.style.display = "none";
	};

	/**
	 * ウィジッドクローズ関数
	 */
	DisasterControl.closeWidget=function(){
		setElement();
		DisasterControl.openBtn.style.display = "block";
		DisasterControl.openBtn.style.position = "absolute";
		DisasterControl.openBtn.style.bottom = (DisasterControl.infoArea.offsetHeight+2)+"px";
		DisasterControl.infoArea.style.display = "none";
	};
};
DisasterControl.prefArray =["北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県","茨城県","栃木県","群馬県","埼玉県","千葉県","東京都","神奈川県","新潟県","富山県","石川県","福井県","山梨県","長野県","岐阜県","静岡県","愛知県","三重県","滋賀県","京都府","大阪府","兵庫県","奈良県","和歌山県","鳥取県","島根県","岡山県","広島県","山口県","徳島県","香川県","愛媛県","高知県","福岡県","佐賀県","長崎県","熊本県","大分県","宮崎県","鹿児島県","沖縄県"];
// Twitterポスト用リンクURL取得
DisasterControl.getTwitterLink=function(category,lon,lat,epicenter,pref,info){
	// 6月3日 21時25分ごろ地震がありました。震源地：福岡県筑豊　震度：３ 福岡県の地図
	var shingen = category == "1" ? "観測地域" : "震源地";	// 速報 OR 確定報
	var mapurl = "/m/" + lat + "_" + lon + "_4/"; // 縮尺は1/30万
	var content = "マピオン地震情報："+info.observationTime+"ごろ地震がありました。"+shingen+"："+epicenter+"　最大震度："+info.MaxSeismicIntensity+" "+pref+"の地図 ";
	return  mapurl + "?t=maptweet&content=" + encodeURI(content);
};
function DisasterControlTop(category,epicenterAreaName,MaxSeismicIntensity,observationTime){
	var prefRegExp=new RegExp("^("+DisasterControl.prefArray.join("|")+")(.*)");
	if(epicenterAreaName.match(prefRegExp)){
		var prefName = RegExp.$1;
		var item = DisasterControl.prefInfo[prefName];
		if(item){
			var tl = document.getElementById("DisasterTwitterL");
			tl.href = "http://www.mapion.co.jp/m/"+item.lat+"_"+item.lon+"_4/cate=twitter";
			var tr = document.getElementById("DisasterTwitterR");
			tr.href = "http://www.mapion.co.jp"+DisasterControl.getTwitterLink(category,item.lon,item.lat,epicenterAreaName,prefName,{MaxSeismicIntensity:MaxSeismicIntensity,observationTime:observationTime});
			var dt = document.getElementById("DisasterTwitter");
			dt.style.display = "block";
		};
	};
};

DisasterControl.prefInfo={
	"北海道":{lat:43.0618469,lon:141.3505461},
	"青森県":{lat:40.8216161,lon:140.7436000},
	"岩手県":{lat:39.7008600,lon:141.1557780},
	"宮城県":{lat:38.2659188,lon:140.8752719},
	"秋田県":{lat:39.7158319,lon:140.1058100},
	"山形県":{lat:38.2374769,lon:140.3666680},
	"福島県":{lat:37.7470138,lon:140.4710600},
	"茨城県":{lat:36.3386566,lon:140.4501011},
	"栃木県":{lat:36.5624255,lon:139.8867672},
	"群馬県":{lat:36.3880630,lon:139.0640619},
	"埼玉県":{lat:35.8540269,lon:139.6522319},
	"千葉県":{lat:35.6013238,lon:140.1264561},
	"東京都":{lat:35.6866411,lon:139.6948838},
	"神奈川県":{lat:35.4444150,lon:139.6456500},
	"新潟県":{lat:37.8995138,lon:139.0264588},
	"富山県":{lat:36.6920619,lon:137.2143650},
	"石川県":{lat:36.5914780,lon:136.6286600},
	"福井県":{lat:36.0620461,lon:136.2246369},
	"山梨県":{lat:35.6609469,lon:138.5715688},
	"長野県":{lat:36.6481880,lon:138.1840230},
	"岐阜県":{lat:35.3880388,lon:136.7250919},
	"静岡県":{lat:34.9735619,lon:138.3861088},
	"愛知県":{lat:35.1771630,lon:136.9095050},
	"三重県":{lat:34.7269888,lon:136.5115569},
	"滋賀県":{lat:35.0010861,lon:135.8713369},
	"京都府":{lat:35.0185488,lon:135.7585488},
	"大阪府":{lat:34.6830438,lon:135.5225480},
	"兵庫県":{lat:34.6883150,lon:135.1861350},
	"奈良県":{lat:34.6820169,lon:135.8356680},
	"和歌山県":{lat:34.2227319,lon:135.1699588},
	"鳥取県":{lat:35.5007330,lon:134.2404119},
	"島根県":{lat:35.4692150,lon:133.0531619},
	"岡山県":{lat:34.6584400,lon:133.9370480},
	"広島県":{lat:34.3931800,lon:132.4619330},
	"山口県":{lat:34.1824619,lon:131.4733330},
	"徳島県":{lat:34.0626238,lon:134.5618169},
	"香川県":{lat:34.3368650,lon:134.0459161},
	"愛媛県":{lat:33.8384050,lon:132.7686961},
	"高知県":{lat:33.5563250,lon:133.5336711},
	"福岡県":{lat:33.6031630,lon:130.4204080},
	"佐賀県":{lat:33.2460919,lon:130.3019330},
	"長崎県":{lat:32.7415761,lon:129.8757338},
	"熊本県":{lat:32.7868019,lon:130.7440250},
	"大分県":{lat:33.2347861,lon:131.6149419},
	"宮崎県":{lat:31.9075369,lon:131.4262188},
	"鹿児島県":{lat:31.5566880,lon:130.5602719},
	"沖縄県":{lat:26.2084800,lon:127.6827700}
};
