// 最初に表示する場所
var _iniCenter = new LLPoint("35/40/40", "139/46/13.6");
var _iniScale = 25000;


// アイコンを表示する最小縮尺
var _contentsLimit = 3000000;

var _m = null;	// ProAtlasMap
var _sm = null;	// SubMap
var _ms = null; // Mapsvr
function create_map() {
	_m = new ProAtlasMapCtrl(document.getElementById('map'),"yahoomap.xml");
	_m.setVisibleCopyright(false);
	_m.setEnableAutoLayerChange(true);
	_m.setEnableKeyboardOperation(false);
	_m.setEnableZoomendFadeinEfct(true);
	AlpsEvent.addEvent(_m,"mapMoved",mapMoved);
	AlpsEvent.addEvent(_m,"layerChanged",layerChanged);
	AlpsEvent.addEvent(_m,"layerListChanged",layerListChanged);
	var cr=ImageMaker.createImg("http://base.alpslab.jp/images/yahoo_japan_copyright.gif");
	cr.style.position="absolute";
	cr.style.left="";
	cr.style.top="";
	cr.style.right="0px";
	cr.style.bottom="0px";
	cr.style.zIndex=1;
	_m.getContainer().appendChild(cr);
/*
	_sm = new ProAtlasMapCtrl(document.getElementById('submap'),"yahoomap.xml");
	_sm.setVisibleCopyright(false);
	_sm.setVisibleCenterMark(false);
	_sm.setEnableKeyboardOperation(false);
	_sm.setEnableWheelOperation(false)
	AlpsEvent.addEvent(_sm,"mapMoved",sm_mapMoved);
	AlpsEvent.addEvent(_sm,"resize",sm_resized);
*/
	_ms = new MapsvrCtrl(_m,"flickr.xml");
	_ms.setIconThreshold(_contentsLimit);
	_m.moveAndLayerTo(_iniCenter,_m.getLayerId(_iniScale));
}
function show_contents(){
	var a=new Array();
	var c=_ms.getCategoryList();
	for(var i=0;i<c.length;i++){
//		var p=document.getElementById('cat_'+c[i].id);
//		if(p&&p.checked){
			a.push(c[i].id);
//		}
	}
	_ms.showCategories(a);
}
function layerto(index){
	if(!_m)return;
	_m.smoothLayerTo(index);
}
var _layers={'s5000':'５千','s10000':'1万','s25000':'2.5万','s70000':'7万','s250000':'25万','s500000':'50万','s1000000':'100万','s3000000':'300万','s5000000':'広域','s26000000':'全図'};
var _layerCollect=new Array();
function create_layers(){
	for(var i=0;i<_layerCollect.length;i++){
		var menu=_layerCollect[i];
		document.getElementById("layers").removeChild(menu);
	}
	_layerCollect._clear();
	for(var i = _m.getLayerCount() - 1; i >= 0; --i){
		var scale=_m.getLayerScale(i);
		if(!_layers['s'+scale])continue;
		var menu = document.createElement("a");
		menu.setAttribute("layerid", i);
		menu.innerHTML = _layers['s'+scale];
		document.getElementById("layers").appendChild(menu);
		_layerCollect.push(menu);
	}
/*
	for(var i=0;i<_m.getLayerCount();i++){
		var scale=_m.getLayerScale(i);
		if(!_layers['s'+scale])continue;
		var menu=document.createElement("span");
		menu.className="adminmenu";
		menu.setAttribute("layerid",i);
		menu.innerHTML='<a href="javascript:layerto('+i+')">'+_layers['s'+scale]+'</a>';
		_layerCollect.push(menu);
		document.getElementById("layers").appendChild(menu);
	}
*/
	set_layers();
}
function set_layers(){
	if(!_m) return;
	var s=_m.getLayerScaleList();
	for(var i=0;i<_layerCollect.length;i++){
		var menu=_layerCollect[i];
		var layerid=menu.getAttribute("layerid");
		if(!s) continue;
		var scale=_m.getLayerScale(layerid);
		if(s._indexOf(scale)< 0){
			menu.className="disabled_layer";
			menu.removeAttribute("href");
		} else{
			menu.className="other_layer";
			menu.href='javascript:layerto('+layerid+')';
		}
		if(layerid==_m.getCurrentLayerId()){
			menu.className="current_layer";
		}
/*
		if(layerid==_m.getCurrentLayerId()){
			menu.style.fontWeight="bold";
		}else{
			menu.style.fontWeight="normal";
		}
		if(s._indexOf(scale)<0){
			menu.style.color="gray";
			menu.innerHTML=_layers['s'+scale];
		}else{
			menu.style.color="";
			menu.innerHTML='<a href="javascript:layerto('+layerid+')">'+_layers['s'+scale]+'</a>';
		}
*/
	}
}
function sokodoko(pos) {
	if(!pos) pos=_m.getCenterLatLon();
	var xmlhttp=AlpsUtil.getXMLHttp();
	if (!xmlhttp) return;
	xmlhttp.open("POST", "/bin/address", true);
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			var adr=AlpsUtil.getElementContent(xmlhttp.responseXML,"gxml:unstructuredAddressString");
			if(!adr) adr=AlpsUtil.getElementContent(xmlhttp.responseXML,"unstructuredAddressString");
			set_text('map_title',adr||'地図');
		}
	}
	var doc=AlpsUtil.createXMLDOM();
	var query=doc.createElement("query");
	doc.appendChild(query);
	var coordinates=doc.createElement("coordinates");
	query.appendChild(coordinates);
	coordinates.appendChild(doc.createTextNode(pos));
	xmlhttp.send(doc)
}
function new_photolist(){
	var xmlhttp=AlpsUtil.getXMLHttp();
	if (!xmlhttp) return;
	xmlhttp.open("GET", "/bin/search", true);
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			set_text("photo_message","最近の投稿");
			set_text("photo_navi","");
			set_text('photos',xmlhttp.responseText);
		}
	}
	set_text("photo_message","検索中…");
	xmlhttp.send(null)
}
function clear_result(){
	set_view('result_pane',false);
}
var _defaultID=null;
var _sep="#";
function parse_hash(){
	var h=null;
	if(document.location.search){
		h=document.location.search.substring(1);
		_sep="?";
	}else if(document.location.hash){
		h=document.location.hash.substring(1);
		_sep="#";
	}
	if(!h) return;
	var pairs=h.split(";");
	var s=25000;
	var p;
	for(var i=0;i<pairs.length;i++){
		var pair=pairs[i].split("=");
		if(pair[0]=="s"){
			s=pair[1];
		}else if(pair[0]=="p"){
			p=pair[1];
		}else if(pair[0]=="id"){
			_defaultID=pair[1];
		}
	}
	if(p){
		_iniScale=s;
		_iniCenter=new LLPoint(p);
		return true;
	}
}
function set_url(){
	if(!_m)return;
	var s=_m.getCurrentScale();
	var p=_m.getCenterLatLon();
	var path=document.location.href.split(_sep)[0];
	var url=path+_sep+"s="+s+";p="+p;
	document.getElementById("url").innerHTML='<a href="'+url+'">'+url+'</a>';
}
function show_categories(){
	var p=document.getElementById('categories');
	var s="";
	var c=_ms.getCategoryList();
	var scale=_m.getCurrentScale();
	for(var i=0;i<c.length;i++){
		var id="cat_"+c[i].id;
		var e=document.getElementById(id);
		if(e){
			e.disabled=_contentsLimit&&(scale>_contentsLimit);
		}else{
			var di=(scale>_contentsLimit)?" disabled":"";
			s+='<input type="checkbox" id="'+id+'" onclick="show_contents()"'+di+'><label for="'+id+'"><img src="'+c[i].iconImage[0]+'"> '+c[i].name+'</label><br>\n';
		}
	}
	if(s) p.innerHTML+=s;
}
function check_categories(){
	var p=document.getElementById('categories');
	for(var i=0;i<p.elements.length;i++){
		if(p.elements[i].type=="checkbox"){
			p.elements[i].checked=true;
		}
	}
	show_contents();
}
var _mtimer;
function moveto(pos,delay){
	if(!_m)return;
	if(typeof(pos)=="string") pos=new LLPoint(pos);
	if(delay){
		_mtimer=window.setTimeout(function(){_m.moveTo(pos)},delay);
	}else{
		_m.moveTo(pos);
	}
}
function submap_moveto(){
	if(!_m||!_sm) return;
	var s=_m.getCenterLatLon();
	_sm.moveTo(s);
	set_subframe();
}
function submap_layerto(){
	if(!_m||!_sm) return;
	var scale=_m.getCurrentScale();
	var sid=_sm.getLayerId(scale)+2;
	if(sid>=_sm.getLayerCount()) sid=_sm.getLayerCount()-1;
	_sm.layerTo(sid);
	set_subframe();
}
function set_subframe(){
	if(!_m)return;
	if(!_sm)return;
	var m=_m.getContainer();
	var sm=_sm.getContainer();
	var tl=_m.log2LatLon(new Point(0,0));
	var br=_m.log2LatLon(new Point(m.offsetWidth,m.offsetHeight));
	var tlp=_sm.latLon2Log(tl);
	var brp=_sm.latLon2Log(br);
	var sf=document.getElementById("subframe");
	if(!sf){
		sf=document.createElement("div");
		sf.id="subframe";
		sf.style.position="absolute";
		sf.style.overflow="hidden";
		sf.style.borderWidth="2px";
		sf.style.borderStyle="solid";
		sf.style.borderColor="red";
		sf.style.zIndex=1;
		sm.appendChild(sf);
	}
	sf.style.left=Math.floor(tlp.x)+"px";
	sf.style.top=Math.floor(tlp.y)+"px";
	sf.style.width=Math.floor(brp.x-tlp.x)+"px";
	sf.style.height=Math.floor(brp.y-tlp.y)+"px";
}
function set_text(id,text){
	var e=document.getElementById(id);
	if(e) e.innerHTML=text;
}
function set_view(id,visible){
	var e=document.getElementById(id);
	if(e) e.style.display=visible?"":"none";
}
function get_value(id){
	var e=document.getElementById(id);
	if(!e) return;
	if(e.type.match(/^select/)){
		return e.options[e.selectedIndex].value;
	}else if(e.type=='checkbox'){
		if(e.checked) return e.value;
	}else{
		return e.value;
	}
}
function submap_resize(){
	if(!_sm) return;
	var p=_sm.getContainer();
	p.style.height=p.offsetWidth+"px";
	_sm.resetCenter();
}
function copy_clip(id) {
	var e=document.getElementById(id);
	if(_bi.type==1&&e.value) {
		var tr=e.createTextRange();
		tr.execCommand("Copy");
	}
}
function show_user(){
	var xmlhttp=AlpsUtil.getXMLHttp();
	if (!xmlhttp) return;
	xmlhttp.open("GET", "/bin/manager?t="+(new Date().getTime()), true);
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			var user=AlpsUtil.getElementContent(xmlhttp.responseXML,"user");
			var login=AlpsUtil.getElementContent(xmlhttp.responseXML,"login");
			var logout=AlpsUtil.getElementContent(xmlhttp.responseXML,"logout");
			if(user){
			//	set_text("user",'こんにちは、'+user+'さん（<a href="'+logout+'">ログアウト</a>）');
				set_text("user",'こんにちは、<a title="ログアウトする" href="'+logout+'">'+user+'さん</a> | <a title="' + user + 'さんのmyPhotoを見る" href="/myphoto?' + user + '"><img style="border:none;" src="/myphoto/myphoto.gif">myPhoto</a><img src="http://www.alpslab.jp/images/new.gif" />');
				set_view("photo-useronly",true);
				if(_ms) _ms.addQueryParameter("user",user);
				photo_list(1);
			}else{
				set_text("user",'<a href="'+login+'">Flickr アカウントでログイン</a>');
				set_view("photo-useronly",false);
				if(_ms) _ms.removeQueryParameter("user");
				new_photolist();
			}
		}
	}
	xmlhttp.send(null);
}
function photo_list(pg){
	var num=10;
	var kw=get_value("kw")||"";
	var uo=get_value("useronly")||"false";
	var xmlhttp=AlpsUtil.getXMLHttp();
	if (!xmlhttp) return;
	xmlhttp.open("GET", "/bin/manager?type=list&num="+num+"&uo="+uo+"&page="+pg+"&kw="+encodeURIComponent(kw), true);
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			var page=parseInt(AlpsUtil.getElementAttribute(xmlhttp.responseXML,"photos","page")||0);
			var pages=parseInt(AlpsUtil.getElementAttribute(xmlhttp.responseXML,"photos","pages")||0);
			if(!pages){
				set_text("photo_message",page?"写真が見つかりませんでした":"検索に失敗しました");
				if(page) set_text("photos","");
				return;
			}
			set_text("photo_message","");
			var s="";
			if(page>1) s+='<a class="photo-prev" href="javascript:photo_list('+(page-1)+')">←前</a>&nbsp;';
			s+='<form class="photo-pages" onsubmit="photo_list(this.page.value);return false"><input size="4" name="page" value="'+page+'" style="text-align: center;" type="text">&nbsp;/'+pages+'ページ</form>&nbsp;';
			if(page<pages) s+='<a class="photo-next" href="javascript:photo_list('+(page+1)+')">次→</a>&nbsp;';
			set_text("photo_navi",s);
			var a=xmlhttp.responseXML.getElementsByTagName("photo");
			var s="";
			for(var i=0;i<a.length;i++){
				var id=a[i].getAttribute("id");
				var title=AlpsUtil.getElementContent(a[i],"title")||"";
				var image=AlpsUtil.getElementContent(a[i],"image");
				var pos=AlpsUtil.getElementContent(a[i],"coordinates");
				var mo=pos?(' onmouseover="moveto(\''+pos+'\',500)" onmouseout="window.clearTimeout(_mtimer)"'):'';
				s+='<div class="photo">';
				s+='<a href="javascript:photo_item(\''+id+'\')" title="'+title+'"'+mo+'>';
				s+='<img class="photo-image" src="'+image+'">';
				s+='</a>';
				if(pos){
					s+='<img class="photo-mapicon" src="http://www.alpslab.jp/images/map_icon.png">';
				}
				s+='</div>';
			}
			set_text("photos",s);
		}else if(xmlhttp.readyState == 4){
			set_text("photo_message","検索に失敗しました");
		}
	}
	set_text("photo_message","検索中…");
	xmlhttp.send(null);
}
function photo_item(id){
	var xmlhttp=AlpsUtil.getXMLHttp();
	if (!xmlhttp) return;
	xmlhttp.open("GET", "/bin/manager?type=item&id="+id, true);
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			set_text("result_title","写真情報");			
			set_text("result_content",xmlhttp.responseText);			
			var img=document.createElement("img");
			img.src="icon/close.gif";
			img.id="result_close";
			img.title="閉じる";
			img.style.cursor="pointer";
			img.onclick=function(){
				set_view('result_pane',false);
				//taro 060605 begin
				//operaはCSSのfloatによるdivのリレイアウトが上手く行かないので、mapの幅を明示的に指定する
				if (_bi.type == 4){
					document.getElementById('map').style.width = "";
				}
				// taro end
				_m.resetCenter();
			};
			document.getElementById("result_content").appendChild(img);
		}
	}
	set_text('result_title',"検索中...");
	set_text('result_content',"");
	set_view('result_pane',true);
	//taro 060605 begin
	//operaはCSSのfloatによるdivのリレイアウトが上手く行かないので、mapの幅を明示的に指定する
	if (_bi.type == 4){
		document.getElementById('map').style.width = "520px";
	}
	// taro end
	_m.resetCenter();
	xmlhttp.send(null);
}
function photo_tb(id){
	if(!_m) return;
	if(!window.confirm("この写真に現在位置を付与しますか？")) return;
	var pos=_m.getCenterLatLon();
	var xmlhttp=AlpsUtil.getXMLHttp();
	if (!xmlhttp) return;
	xmlhttp.open("GET", "/bin/manager?type=tb&id="+id+"&p="+pos, true);
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			if(pos) moveto(pos);
			photo_item(id);
			if(xmlhttp.responseText.match(/success/)){
				window.alert("現在位置を付与しました");
			}else{
				window.alert("現在位置の付与に失敗しました");
			}
		}
	}
	xmlhttp.send(null);
}

// Events
function mapMoved(){
	sokodoko();
//	submap_moveto();
//	set_url();
}
function layerChanged(){
//	show_categories();
//	submap_layerto();
//	set_url();
	set_layers();
	if(_m&&_ms) _ms.addQueryParameter("scale",_m.getCurrentScale());
}
function sm_mapMoved(){
	if(!_m)return;
	var s=_sm.getCenterLatLon();
	_m.moveTo(s,true);
}
function sm_resized(){
	set_subframe();
}
function layerListChanged(id){
	if(!_m) return;
	if(id==_m.getCurrentPackageId()){
		set_layers();
	}
}
window.onresize=function(){
//	submap_resize();
}
window.onload=function(){
	parse_hash();
	create_map();
//	submap_resize();
	create_layers();
	show_user();
//	show_categories();
//	check_categories();
	show_contents();
	if(_defaultID){
		photo_item(_defaultID);
	}
}
