////////////////////////////////////////////////////////////
//
//ファイル名:   attributesearch.js
//機能		:	属性検索
//依存		:	-
//バージョン:　 2.0.0.1
//更新日時	:　 2006.08.01
//更新者	:	kawame
//
////////////////////////////////////////////////////////////


	var searchCircleCheck = null;//イベントID
	
	//円範囲検索オプション設定


	function showSearchCircleOption()
	{
		//TODO
		var node = document.getElementById("attr_search_container");
		if(node)
		{
			document.getElementById("attr_search_container").style.color = "Gray";
			document.getElementById("atrSingle").disabled = true;
			document.getElementById("atrMulti").disabled = true;
			document.getElementById("num_attr_select").disabled = true;
		}
			searchCircleCheck = window.setInterval("checkSubWin();",500);
			popup('reqCircleSearchAtr');			
	}	
	
	
	function checkSubWin()
	{
		if(!PopWin_o)// && PopWin_o.closed)
		{
			showSearchOption();
		}
	}
	
	
	
	//検索オプション表示状態チェック
	function showSearchOption()
	{
		if(cur_mode != 'search_circle')
		{ 
			//TODO
			var node = document.getElementById("attr_search_container");
			if(node)
			{
				document.getElementById("attr_search_container").style.color = "";
				document.getElementById("atrSingle").disabled = false;
				document.getElementById("atrMulti").disabled = false;
				document.getElementById("num_attr_select").disabled = false;
			
				con_attrcount = document.getElementById("num_attr_select").value;
			}
			window.clearInterval(searchCircleCheck);						
		}
	}																	   //
																	       //
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
//
//串刺検索
//
	var asp_vw    = null;//検索結果表示方法 0:個票 1:一覧
	var asp_cnt   = null;//検索結果最大表示件数
	function initASPValues()
	{
		setASPViewOption();
		setASPCountOption();
	}

//表示方法コントロール
	function setASPViewOption()
	{
		var node = document.getElementById("asp_search_view");
		var array = attrViewArray;
		if(node)
		{
			
			var obj = "";
			for (var i = 0;i<array.length;i++)
			{
				var opt ="<nobr>";
				opt += "<input type='radio' name='select_attr_view' onclick='asp_changeView(value)'" ;
				
				opt += " id='"+ array[i].id +"'";
				opt += " value='"+ array[i].value+"'";
				if(array[i].def == 1)
				{
					opt += " CHECKED";
					asp_vw = array[i].value;
				}
				opt += ">" ;
				opt += "<label for='"+array[i].id +"'>";
				opt += array[i].alt;
				opt += "</label>";			
				opt += "</nobr>" ;			
				obj += opt ;
			}
			node.innerHTML = obj;
		}
		else
		{
			for (var i = 0;i<array.length;i++)
			{
				if(array[i].def == 1)
				{
					asp_vw = array[i].value;
					break;
				}
			}
		}
	}
	//表示件数コントロール
	function setASPCountOption()
	{
		var node = document.getElementById("asp_search_cnt");
		var array = attrCountArray;
		if(node)
		{
			
			var obj = "<select id='num_attr_select' onchange='asp_changeCount(value);return false;'>";
					
			for (var i = 0;i<array.length;i++)
			{
				var opt = "<option";
				
				opt += " value='" +array[i].value +"'";
				
				if(array[i].def == 1)
				{
					opt += " selected";
					asp_cnt = array[i].value;
				}
				opt += ">" ;
				opt += array[i].value;
				opt += "</option>";
							
				obj += opt ;
			}
			
			obj +="</select>件";
			
			node.innerHTML = obj;
		}
		else
		{
			for (var i = 0;i<array.length;i++)
			{
				if(array[i].def == 1)
				{
					asp_cnt = array[i].value;
					break;
				}
			}
		}
	}
	
	//表示方法変更
	function asp_changeView(value)
	{
		asp_vw = value;
	}		
	//表示件数変更
	function asp_changeCount(value)
	{
		asp_cnt = value;
	}



	
	//Attribute Search Point
	function initAttrSearchPoint()
	{
		if (eventLayer)
		{	
			eventLayer.onclick		= setAttrSearchPoint;
			eventLayer.ondblclick	= null;
			eventLayer.onmousedown	= null;
			eventLayer.onmouseup	= null;
			eventLayer.onmousemove  = null;
			eventLayer.onmouseover  = null;
			eventLayer.onmouseout   = null;
		}	
	}
	
	//位置指定(マウスクリック)
	function setAttrSearchPoint(evt,mode)
	{
		click_count = 0;
		setMapLoadingLayer();
		if(evt)
		{
			if(mode == 'pnt')
			{
				evt = (evt) ? evt : ((window.event) ? event : null);
				var coords = getPositionedEventCoords(evt);
			}
			else if(mode == 'coord')
			{
				var coords = evt;
			}
			
			point_click = null;
			
			var p = new InputPoint(coords.x, coords.y);
			
			var c = p.getReal(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);
			//pixelからmを求める


			var r = Math.round((aspRadius * (map_maxX-map_minX)/map_width)*1000)/1000;
			
			logger.debug('点:('+c.x+','+c.y+'),'+r);
			con_coord  = c;
			con_radius = r;
			con_attrview = asp_vw;
			con_attrcount = asp_cnt;
			con_searchtype = "point";
			gis.eventManager.featureSearch();
		}
		//DEF_MODEと串刺し検索を併合しているので今回は判定はなくてよい
		//串刺し検索単体でのモードを用意している場合は以下の判定が必要	
		//if(gis.modeManager.getCurrentMode()=='search_point')
		//{
		//	modeChange(DEF_MODE);
		//}
		//else
		//{
			//if(!flg)
			//{
			//	setMC(evt);
			//}
		//}
		//ここまで-----------------------------------------------------
		
	}														               //
																		   //
/////////////////////////////////////////////////////////////////////////////

	

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//範囲(円)指定検索
//
	var dummyCircle;//検索範囲を示す円
	
	var asc_rad   = null;//検索範囲半径


	var asc_vw    = null;//検索結果表示方法 0:個票 1:一覧
	var asc_cnt   = null;//検索結果最大表示件数
	var asc_layer = null;//検索対象レイヤNo.

	//円範囲検索画面・定数初期化

	function initASCValues()
	{
		var win = window.opener?window.opener:this;
			
		setASCRadiusOption();
		setASCViewOption();
		setASCCountOption();
	}
	
	//半径コントロール
	function setASCRadiusOption()
	{
		var node = document.getElementById("asc_search_radius");
		if(node)
		{
			var array = window.opener.ascRadiusArray;
			
			var obj = "<select class='radius_select' id='radius_select' onchange='asc_changeRadius(value);return false;'>";
				
			for (var i = 0;i<array.length;i++)
			{
				var opt = "<option";
				
				opt += " value='"+ array[i].value+"'";
				
				if(array[i].def == 1)
				{
					opt += " selected";
					asc_rad = array[i].value;
				}
				opt += ">" ;
				opt += array[i].value;
				opt += "</option>";
							
				obj += opt ;
			}
			obj +="</select>m";
			
			node.innerHTML = obj;
		}
		else
		{
			document.body.innerHTML = "error!";
		}
	}
	//表示方法コントロール
	function setASCViewOption()
	{
		var node = document.getElementById("asc_search_view");
		if(node)
		{
		var array = window.opener.attrCircleViewArray;
		
		var obj = "";
		for (var i = 0;i<array.length;i++)
		{
			var opt = "<nobr>" ;	
			opt		+= "<input type='radio' name='select_attr_view' onclick='asc_changeView(value)'" ;
			
			opt += " id='"+ array[i].id +"'";
			opt += " value='"+ array[i].value+"'";
			if(array[i].def == 1)
			{
				opt += " CHECKED";
				asc_vw = array[i].value;
			}
			opt += ">" ;
			opt += "<label for='"+array[i].id +"'>";
			opt += array[i].alt;
			opt += "</label>";	
			opt += "</nobr><br/>" ;			
			obj += opt ;
		}
		
		node.innerHTML = obj;
		}
	}
	//表示件数コントロール
	function setASCCountOption()
	{
		var node = document.getElementById("asc_search_cnt");
		if(node)
		{
			var array = window.opener.attrCountArray;
			
			var obj = "<select class='' id='num_attr_c_select' onchange='asc_changeCount(value);return false;'>";
					
			for (var i = 0;i<array.length;i++)
			{
				var opt = "<option";
				
				opt += " value='" +array[i].value +"'";
				
				if(array[i].def == 1)
				{
					opt += " selected";
					asc_cnt = array[i].value;
				}
				opt += ">" ;
				opt += array[i].value;
				opt += "</option>";
							
				obj += opt ;
			}
			
			obj +="</select>件";
			
			node.innerHTML = obj;
		}
	}
	
	
	//半径変更
	function asc_changeRadius(value)
	{
		asc_rad = value;
	}		
	//表示方法変更
	function asc_changeView(value)
	{
		asc_vw = value;
		setAttrView();
	}		
	//表示件数変更
	function asc_changeCount(value)
	{
		asc_cnt = value;
	}
	//検索対象レイヤ選択時
	function asc_changeLayerNo(value)
	{
		asc_layer = value;
		setAttrView();
	}
	//結果表示オプション選択時
	function setAttrView()
	{	
		if(asc_vw == 1)
		{
			if(asc_layer == null)
			{
				//TODO
				var node = document.getElementById("attr_circle_button");
				if(node)
				{
					document.getElementById("attr_circle_button").style.display = "none";
					document.getElementById("attr_circle_button_second").style.display = "none";	
				}
			}
			else
			{
				if(!document.getElementById("attr_circle_button_second").innerHTML)
				{
					document.getElementById("attr_circle_button_second").innerHTML = document.getElementById("attr_circle_button").innerHTML;
				}	
				document.getElementById("attr_circle_button").style.display = "block";
				document.getElementById("attr_circle_button_second").style.display = "block";
			}
			document.getElementById("attr_circle_msg").style.display = "block";	
			document.getElementById("attr_circle_layer").style.display = "block";	
				
		}
		else if(asc_vw == 0)
		{
			document.getElementById("attr_circle_msg").style.display = "none";
			document.getElementById("attr_circle_layer").style.display = "none";
			document.getElementById("attr_circle_button").style.display = "block";
			document.getElementById("attr_circle_button_second").style.display = "none";	
		}
		focusWindow();
		fitWindowSize();
	}
	
	


/*	*///
	function SetSearchCircleOption()
	{
		var win = window.opener?window.opener:this;
		win.con_radius = asc_rad;
		win.con_attrview = asc_vw;
		win.con_attrcount = asc_cnt;
		win.con_layerno = asc_layer;
		
		//win.modeChange('search_circle');
		win.modeChange(win.gis.modeManager.modeDefinition.SEARCH_CIRCLE);
		
		
//20060529追加
		if(win != this)
		{
			if(win.getBrowserName() == "Safari")
			{
				//win.focus();
				this.location = "subwin/processing.aspx?mode=main";
			}
			else
			{
				window.close();
				PopWin_o = null;
			}
		}
	}
	
	
	
	//Attribute Search Circle
	function initAttrSearchCircle()
	{
		if (eventLayer)
		{	
			eventLayer.onclick		= setAttrSearchCircle;
			eventLayer.ondblclick	= null;
			eventLayer.onmousedown	= null;
			eventLayer.onmouseup	= null;
			eventLayer.onmousemove  = moveASCircle;
			eventLayer.onmouseover  = overASCircle;
			eventLayer.onmouseout   = outASCircle;
		}
	}
	
	//範囲円の準備
	function setASCircle(c,r)
	{
		if (dummyCircle)
		{	
			dummyCircle.clear();
			dummyCircle=null;
		}
		// 入力開始

		dummyCircle = new SearchCircle(c, r);
		dummyCircle.xmin = 0;
		dummyCircle.ymin = 0;
		dummyCircle.xmax = map_width;
		dummyCircle.ymax = map_height;
		dummyCircle.draw();	
	}
				
	//中心位置指定(マウスクリック)
	function setAttrSearchCircle(evt)
	{	
		evt = (evt) ? evt : ((window.event) ? event : null);	
		var coords = getPositionedEventCoords(evt);
		var p = new InputPoint(coords.x, coords.y);
			
		var c = p.getReal(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);
	
		//半径(m)からpixelを求める


		//var r = con_radius * map_width/(map_maxX-map_minX);
		
		con_coord  = c;
		con_searchtype = "circle";
		gis.eventManager.featureSearch();
		outASCircle();
		
		/*モードの遷移等、後処理を記述*/
		
		showSearchOption();
		modeChange(DEF_MODE);
			
		
	}		
	
	//範囲円表示時の円移動処理(マウスムーブ)
	function moveASCircle(evt)
	{
		if(dummyCircle)
		{
			evt = (evt) ? evt : ((window.event) ? event : null);
				
			var coords = getPositionedEventCoords(evt);
			var c = new InputPoint(coords.x, coords.y);
			
			dummyCircle.redraw(c);
		}
	}
	
	//範囲円作成(マウスオーバー)
	function overASCircle(evt)
	{
		evt = (evt) ? evt : ((window.event) ? event : null);
			
		var coords = getPositionedEventCoords(evt);
		var c = new InputPoint(coords.x, coords.y);
		//実際の半径距離から画面上の半径を求める


		var r = con_radius * map_width/(map_maxX-map_minX);
			
		setASCircle(c,r);
	}
	
	//マウスが地図上から離れた時の処理


	function outASCircle()
	{
		if(dummyCircle)
		{	
			dummyCircle.clear();
			dummyCircle = null;	
		}
	}
	
	//範囲円


	function SearchCircle(center, radius)
	{
		if (!center || !radius)
		{
			alert("Circle : コンストラクタの引数が不正です");
			return;
		}
		var _center 	= center;
		var _radius		= radius;
		var _id			= "asc_";
		var _numNodes	= parseInt(120 * radius / 100);
		var _maxNodes	= 50;
		var _nodes		= new Array();
		
		_numNodes = Math.min(_numNodes,_maxNodes);
			
		// 最大ノード数が指定されたら予めノードを作成しておく
		if (_numNodes)
		{
			var i;
			for (i = 0; i < _numNodes; i++)
			{
				var _node = document.createElement("img");
				_node.id				= _id+i;
				_node.className			= "attr_search";	
				_node.src				= IMAGE_BLANK;
				_node.style.display 	= "none";
				document.getElementById("dummyLayerContainer").appendChild(_node);
				_nodes[i] 				= _node;
			}
		}
		
		this.xmin = 0;
		this.ymin = 0;
		this.xmax = Number.MAX_VALUE;
		this.ymax = Number.MAX_VALUE;
		
		this.getCenter = function()
		{
			return _center;
		}
		
		this.setCenter = function(center)
		{
			_center = center;
		}
		
		this.getRadius = function()
		{
			return _radius;
		}
		
		this.setRadius = function(radius)
		{
			_radius = parseInt(radius);
			_numNodes = parseInt(CIRCLE_DIVIDE_DRAW * radius / 100);
		}
		
		//this.getCenterReal =function(xmin, xmax, width, ymin,ymax,height)
		//{
		//	var x=xmin + _center.x * (map_maxX - map_minX) / map_width;
		//	var y=ymin + _center.y * (map_maxX - map_minY) / map_height;
		//	
		//	var c = new InputPoint(x,y);
		//	return c;
		//}
		
		//this.getRadiusReal =function(xmin, xmax, width)
		//{
		//	return _radius * (map_maxX - map_minX) / map_width;
		//}
		
		
		this.getCenterReal =function(xmin, xmax, width, ymin,ymax,height)
		{
			return _center.toStringReal(xmin, xmax, width ,ymin, ymax, height);
		}
		
		this.getCenterRealCM =function(xmin, xmax, width, ymin, ymax, height)
		{
			return _center.toStringRealCM(xmin, xmax, width, ymin, ymax, height);
		}	
		
		this.getRadiusReal =function(xmin, xmax, width)
		{
			return _radius * (map_maxX - map_minX) / map_width;
		}
		this.getRadiusRealCM =function(xmin, xmax, width)
		{
			return _radius * (map_maxX - map_minX) / map_width * 100;
		}
		this.toStringReal = function(xmin, xmax, width, ymin, ymax, height)
		{
			return this.getCenterReal(xmin, xmax, width, ymin, ymax, height)+","+this.getRadiusReal(xmin, xmax, width);
		
		}

		this.toStringRealCM = function(xmin, xmax, width, ymin,ymax,height)
		{
			return this.getCenterRealCM(xmin, xmax, width, ymin, ymax, height)+","+this.getRadiusRealCM(xmin, xmax, width);
		
		}
		
		
		this.redraw = function(c)
		{
			if (!_numNodes)
			{
				this.clear();
			}
			this.setCenter(c);
			this.draw();
		}
		
		this.draw = function()
		{
			var i;
			for (i = 0; i < _numNodes; i++)
			{
				var _node = _nodes[i];
				if (_node)
				{
					var x					= _center.getX() + _radius * Math.cos(Math.PI * 2 * i / _numNodes);
					var y					= _center.getY() + _radius * Math.sin(Math.PI * 2 * i / _numNodes);
					var isWithin			= (x >= this.xmin && x <= this.xmax && y >= this.ymin && y <= this.ymax);
					
					_node.style.width		= 3 + Math.round(_radius/50);
					_node.style.height		= 3 + Math.round(_radius/50);
					_node.style.left		= x;
					_node.style.top			= y;
					_node.style.display	= ((isWithin) ? "block" : "none");
				}
			}
		}

		this.clear = function()
		{
			// ノードの最大数が与えられている場合は
			// すべてのノードを削除する
			var i=0;
			for (i = 0; i < _numNodes; i++)
			{
				var _node = document.getElementById(_id + i);
				if (_node)
				{
					_node.parentNode.removeChild(_node);
					_node=null;
				}
			}
		}
		
		this.getType = function()
		{
			return TYPE_CIRCLE;
		}
	}																												  //
																						   							  //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////														 

//属性検索で呼び出すメソッド
function gisSearchAttr()
{
	//completeInput(dummyCircle);
	if(con_searchtype == "circle")
	{
		con_coords = dummyCircle.toStringRealCM(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);	
		con_style  = "_&lwidth=2&primitive=30&lColor=#ff0000&aColor=#ff0000&bgMode=0&brush=-1";
		con_searchtype = con_searchtype + "&geometry="+con_coords+"&style="+con_style;
		
	}
	else if(con_searchtype == "point")
	{
		con_searchtype = con_searchtype;
	}
	
	popup('reqMapClickAtr');
}


