////////////////////////////////////////////////////////////
//
//ファイル名:   movedrag.js
//機能		:	つかみ移動
//依存		:	-
//バージョン:　 2.0.0.1
//更新日時	:　 2006.08.01
//更新者	:	kawame
//
//////////////////////////////////////////////////////////////
	
		//マウスダウン座標
		var psMD			= null;
		//マウスアップ座標
		var peMD			= null;

		//クリップ座標
		var di_minx			= null;
		var di_maxx			= null;
		var di_miny			= null;
		var di_maxy			= null;

		//ドラッグ移動初期化
		function initMD()
		{
			mouse_do_flg=false;
			
			if (eventLayer)
			{	
				eventLayer.onclick		= null;
				eventLayer.ondblclick	= null;
				eventLayer.onmousedown	= startMD;
				eventLayer.onmouseup	= null;
				eventLayer.onmousemove  = null;	
				eventLayer.onmouseover  = null;
				eventLayer.onmouseout	= null;
				cur_cursor = "auto";
				eventLayer.style.cursor	= cur_cursor;
			}
		}

		//つかみ移動用レイヤ準備
		function setMoveLayer()
		{
			di_minx = 0;
			di_maxx = di_minx + map_width;
			di_maxy = 0;
			di_miny = di_maxy + map_height;
			
			//属性検索と併合しない場合はonclick=null;
			//eventLayer.onclick		= setClick_count;
			eventLayer.ondblclick	= setDblClickFlg;		
			eventLayer.onmousemove	= moveMD;
			eventLayer.onmouseup	= endMD;
			eventLayer.onmouseout	= outMD;
		}
			
		//つかみ移動用レイヤ削除
		function clearMoveLayer()
		{	
			di_minx = 0;
			di_maxx = di_minx + map_width;
			di_maxy = 0;
			di_miny = di_maxy + map_height;
			
			eventLayer.onmousemove		=	null;
			eventLayer.onmouseup		=	null;
			eventLayer.onmouseout		=	null;
			//eventLayer.style.cursor	= "auto";
			eventLayer.style.cursor	= cur_cursor;
		}

		//画像のクリッピング処理


		function ClipShow(min_x,min_y,max_x,max_y)
		{
			var clipStyle = "rect("+max_y+","+max_x+","+min_y+","+min_x+")";
			mapLayer.style.clip = clipStyle;
		}

		//つかみ移動開始(マウスダウン)
		function startMD(evt)
		{
			evt = (evt) ? evt : ((window.event) ? event : null);
				
			var coords = getPositionedEventCoords(evt);
			psMD	= new InputPoint(coords.x, coords.y);
			peMD	= new InputPoint(coords.x, coords.y);
			
			setMoveLayer();
			
			click_flg= true;
			mouse_do_flg=true;
			if(!document.all)
			{
				return false;
			}
		}	
		
		
		//つかみ移動中(マウスムーブ)
		function moveMD(evt)
		{	
			evt = (evt) ? evt : ((window.event) ? event : null);
			var coords = getPositionedEventCoords(evt);
			
			if(mouse_do_flg)
			{
				click_flg=false;
				eventLayer.onclick			=	null;
				eventLayer.style.cursor		= "move";
				
				if(psMD)
				{
					//移動距離
					var diff_x = coords.x-psMD.getX();
					var diff_y = coords.y-psMD.getY();
							
					di_minx = -1*diff_x;
					di_maxx = map_width + di_minx;
					
					di_maxy = -1*diff_y;
					di_miny = map_height + di_maxy;
					ClipShow(di_minx,di_miny,di_maxx,di_maxy);
				
					
					mapLayer.style.left=diff_x;
					mapLayer.style.top=diff_y;
					
					peMD.setX(coords.x);
					peMD.setY(coords.y);
				}
				return false;
			}
		}
		
		var dblClickInterval= null;
		
		//つかみ移動終了(マウスアップ)
		function endMD(evt)
		{
			evt = (evt) ? evt : ((window.event) ? event : null);
			
			var coords = getPositionedEventCoords(evt);
			var l = Math.sqrt(Math.pow(psMD.getX()-coords.x,2)+Math.pow(psMD.getY()-coords.y,2));
			
			//click認識にある程度の幅を持たせないと、検索・つかみ移動の両方を行ってしまうため
			//以下の判定を加える
			if(l<7)
			{	
				click_flg = true;
				point_click = coords;
				setClick_count(evt);
				if(!dblClickInterval)
				{
					dblClickInterval = window.setInterval("checkDblClickEvent();", 0);
				}
				
				clearMoveLayer();
			}
			else if(!click_flg)
			{
				mouse_do_flg=false;
				//移動した距離
				var diff_x = peMD.getXReal(map_minX, map_maxX, map_width)-psMD.getXReal(map_minX, map_maxX, map_width);
				var diff_y = peMD.getYReal(map_minY, map_maxY, map_height)-psMD.getYReal(map_minY, map_maxY, map_height);
				
				var view = gis.viewManager.getCurrentView();			
				var new_x=view.center.x-diff_x;
				var new_y=view.center.y-diff_y;
				var new_center=new InputPoint(new_x,new_y);
				
				clearMoveLayer();
				var aLayer = mapLayer;
				mapLayer = moveLayer;
				moveLayer = aLayer;
				
				gis.viewManager.moveManager.moveCenter(new_x,new_y);
			}
			
			if(!document.all)
			{
				return false;
			}
		}																											
			
		function outMD(evt)
		{
			if(mouse_do_flg)
			{
				endMD(evt);
			}	
			
			if(!document.all)
			{
				return false;
			}																									
		}
		
																													
//--------------------------------------------------------------------------------------------------------------------	

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
//
//中心移動
//
		function initMC()
		{
			if (eventLayer)
			{	
				eventLayer.onclick		= setMC;
				eventLayer.ondblclick	= null;
				eventLayer.onmousedown	= null;
				eventLayer.onmouseup	= null;
				eventLayer.onmousemove  = null;
				eventLayer.onmouseover  = null;
				eventLayer.onmouseout	= null;
				//eventLayer.style.cursor	= "crosshair";
			}
		}
					
		//中心移動(マウスクリック)
		function setMC(evt, f)
		{	
			// f = 座標の種別　true:地図画面上の座標　false:イベントの座標
			if(!f)
			{
				evt = (evt) ? evt : ((window.event) ? event : null);
				var coords = getPositionedEventCoords(evt);
			}
			else
			{
				var coords = evt;
			}
			var p = new InputPoint(coords.x, coords.y);
				
			gis.viewManager.moveManager.moveCenter(p.getXReal(map_minX, map_maxX, map_width),p.getYReal(map_minY, map_maxY, map_height));
			click_count = 0;
		}																																

//-----------------------------------------------------------------------------------------------------------------------------------								
