////////////////////////////////////////////////////////////
//
//ファイル名:   input.js
//機能		:	図形入力ライブラリ
//依存		:	-
//バージョン:　 2.0.0.1
//更新日時	:　 2006.08.01
//更新者	:	kawame
//
//////////////////////////////////////////////////////////////



//現在の作図モード

var mode_input			= NONE;

//作図モード

// 点作図
var INPUT_POINT			= "input_point";
// 線作図
var INPUT_POLYLINE		= "input_polyline";
// 面作図
var INPUT_POLYGON		= "input_polygon";
// 矩形作図								
var INPUT_RECT			= "input_rect";
// テキスト作図
var INPUT_TEXT			= "input_text";
// 円作図
var INPUT_CIRCLE		= "input_circle";
// 複数点作図
var INPUT_POINTS		= "input_points";

//図形種別
var TYPE_NONE		= "none";
var TYPE_POINT		= "point";
var TYPE_TEXT		= "text";
var TYPE_POLYLINE	= "polyline";
var TYPE_POLYGON	= "polygon";
var TYPE_CIRCLE		= "circle";
var TYPE_RECT		= "rect";
var TYPE_POINTS		= "points";


//作図に用いるイメージ
var IMAGE_BLANK		= "image/utility/blank.gif";
var IMAGE_ICON		= "image/utility/icon.gif";
var IMAGE_TEXT		= "";


//図形に割り当てるスタイルシートのクラス名



var CSS_ICON		= "input_icon";
var CSS_TEXT		= "input_text";
var CSS_AREA		= "input_rubberband";

//？？？？



var CIRCLE_DIVIDE_COORD	= 60;
var CIRCLE_DIVIDE_DRAW	= 720;


//イベントの内容
var EVENT_CLICK			= "click";
var EVENT_DBLCLICK		= "dblclick";
var EVENT_MOUSE_DOWN	= "mousedown";
var EVENT_MOUSE_UP		= "mouseup";
var EVENT_MOUSE_MOVE	= "mousemove";
var EVENT_MOUSE_OVER	= "mouseover";
var EVENT_MOUSE_OUT		= "mouseout";

//作図の際に図形を描画するレイヤ(div)	
var canvasLayer		= null;//図形を描く場所 (実際はレイヤではなくdiv)

var intervalCheck	= 200;//タイマーイベントのチェック間隔
var intervalId		= null;

//座標取得に関する？イベント



var coordsClick			= null;
var coordsClickPrev		= null;
var coordsDblClick		= null;
var coordsMouseDown		= null;
var coordsMouseDownPrev	= null;
var coordsMouseUp		= null;
var coordsMouseUpPrev	= null;
var coordsMouseMove		= null;
var coordsMouseMovePrev	= null;
var coordsMouseOver		= null;
var coordsMouseOut		= null;
var recentEvent			= null;

var executing			= false;

//矩形描画の際に表示するダミーイメージ
var dummyRect		= null;

//複数点描画時のダミーアイコン
var dymmy_point = null;

//矩形の対角線



var diagonal		= null;

var rectBorder		= 2;

var numPoints		= 0;
var maxPoints		= 200;
//input_modeがinput_pointsの場合のポイントの最大数
var maxPointsNum	= 100;

//ポリゴン・ポリラインの部品となるラインの配列
var segments		= new Array();

//ルート検索の指定点配列
var points		= new Array();

var input_item  = null;

var logger		= new Logger("debug");

var con_style = null;

//現在地図上に作図図形があるか無しか
var figure_flg = false;


var ITEM_ID = "temp";

var REF_NO = 4;

//文字色
var INPUT_FCOLOR="#ff0000";
//線色
var INPUT_COLOR="#ff0000";
//背景色・塗色
var INPUT_BG_COLOR="#ff0000";
//テキストサイズ
var INPUT_FSIZE=20;
//線幅



var INPUT_WIDTH=2;
//アイコンナンバー
var ICON_NO	= 385;
//アイコンサイズ
var INPUT_ISIZE = 10;
//アイコンリファレンスポイントナンバー(デフォルト：中心)
var ICON_REFNO = 4;
//アイコンベーススケール
var ICON_BASE_SCALE = 10;
//透過　0:透過　1:塗り
var INPUT_TRANSPARENT = 0;
//塗り種　-1:null　0:solid　　　
var INPUT_BRUSH	= 0;
//FeatureSize(アイコンとテキストで使用)
var INPUT_SIZE = -1;

//入力された図形の保存種類



//0:一時図形　1:保存図形　2:投稿図形
var save_mode = 0;



var flg_initInput = false;
//モードごとの設定



var routeStart = false;

var configList		= [
	/*■なし*/
		{mode:          NONE,   interval:   0,	maxPoints:   0,	  click:    null,   dblclick:       null,   mousedown: null,  mouseup: null,  mousemove:		null,mouseover:  null, mouseout: null},
	/*■点作図*/
		{mode:    INPUT_POINT,   interval: 100,	maxPoints:   1,	  click: onClick,   dblclick:       null,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: onMouseOver, mouseout: onMouseOut},
	/*■線作図*/	
		{mode:INPUT_POLYLINE,   interval: 400,	maxPoints: 200,	  click: onClick,   dblclick: onDblClick,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: null, mouseout: null},
	/*■面作図*/	
		{mode: INPUT_POLYGON,   interval: 400,	maxPoints: 150,	  click: onClick,   dblclick: onDblClick,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: null, mouseout: null},
	/*■矩形作図*/	
		{mode:    INPUT_RECT,   interval: 100,	maxPoints: 200,	  click: onClick,   dblclick:       null,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: null, mouseout: null},
	/*■円作図*/	
		{mode:  INPUT_CIRCLE,   interval: 100,	maxPoints: 400,	  click: onClick,   dblclick:       null,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: onMouseOver, mouseout: onMouseOut},
	/*■テキスト作図*/	
		{mode:    INPUT_TEXT,   interval: 100,	maxPoints:   1,	  click: onClick,   dblclick:       null,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: onMouseOver, mouseout: onMouseOut},
	/*■複数点作図(ルート検索など)*/	
		{mode:	 INPUT_POINTS,   interval: 100,	maxPoints: 100,	  click: onClick,   dblclick:		null,   mousedown: null,  mouseup: null,  mousemove: onMouseMove ,mouseover: onMouseOver, mouseout: onMouseOut}
	];


//
//	初期化

//
function initInput()
{
	// 設定リストの擬似連想配列を作成
	var i;
	for (i = 0; i < configList.length; i++)
	{
		configList[configList[i].mode] = configList[i];
	}

	// 初期モードをポイント入力に設定



	if(!mode_input)
	{
		mode_input		= INPUT_POINT;
	}
	
	dummyRect	= null;
	numPoints	= 0;
	segments	= new Array();
	points		= new Array();
}


//作図用レイヤ作成		
function setCanvasLayer()
{
	clearCanvasLayer();
	
	canvasLayer = document.createElement('div');
	var oDiv = document.getElementById("dummyLayerContainer");
	canvasLayer.id  = "div_canvas";
	oDiv.appendChild(canvasLayer);	
	canvasLayer.style.left=0;
	canvasLayer.style.top=0;
	canvasLayer.style.display="block";	
	
	INPUT_SIZE  = -1;
	INPUT_ISIZE  = -1;
}

//作図用レイヤ消去	
function clearCanvasLayer()
{
	if(canvasLayer)
	{	
		canvasLayer.innerHTML = "";
		canvasLayer.parentNode.removeChild(canvasLayer);
		canvasLayer = null;	
	}	
	
	numPoints = 0;
	segments = new Array();
}	

//
//	イベントチェック
//
function checkEvent()
{
	if (! executing)
	{
		executing = true;
		
		// ダブルクリックイベントの処理

		if (coordsDblClick)
		{
			logger.debug("dblclick");
			
			if (recentEvent && recentEvent.type == EVENT_CLICK)
			{
				coordsDblClick = recentEvent.coords;
			}

			//onDblClickCommon(coordsClickPrev);
			//recentEvent = new InputEvent(EVENT_DBLCLICK, coordsClickPrev);
			
			onDblClickCommon(coordsDblClick);
			recentEvent = new InputEvent(EVENT_DBLCLICK, coordsDblClick);

			coordsDblClick = null;
			coordsMouseDown = null;
			coordsMouseDownPrev = null;
			coordsMouseUp = null;
			coordsMouseUpPrev = null;
			coordsMouseMove = null;
			coordsMouseMovePrev = null;
			coordsClick = null;
			coordsClickPrev = null;
			coordsMouseOver = null;
			coordsMouseOut = null;
		}
		
		// マウスオーバーイベントの処理

		if (coordsMouseOver)
		{
			//logger.debug("over");

			onMouseOverCommon(coordsMouseOver);
			
			recentEvent = new InputEvent(EVENT_MOUSE_OVER, coordsMouseOver);

			coordsMouseOver = null;
			coordsMouseMove = null;
		}

		// マウスアウトイベントの処理

		if (coordsMouseOut)
		{
			//logger.debug("out");
			
			onMouseOutCommon(coordsMouseOut);
			
			recentEvent = new InputEvent(EVENT_MOUSE_OUT, coordsMouseOut);

			coordsMouseOut = null;
			coordsMouseMove = null;
		}
		
		// マウス移動イベントの処理

		if (coordsMouseMove)
		{
			//logger.debug("move");

			if (! coordsMouseMove.equals(coordsMouseMovePrev))
			{
				onMouseMoveCommon(coordsMouseMove);
			}
			
			recentEvent = new InputEvent(EVENT_MOUSE_MOVE, coordsMouseMove);

			coordsMouseMovePrev = coordsMouseMove;
			coordsMouseMove = null;
			
			if(mouse_do_flg)
			{
				coordsMouseClick = null;
			}
		}
		
		// マウスDownイベントの処理

		if (coordsMouseDown)
		{
			logger.debug("down");
			
			if (! coordsMouseDown.equals(coordsMouseDownPrev))
			{
				onMouseDownCommon(coordsMouseDown);
			}
			
			recentEvent = new InputEvent(EVENT_MOUSE_DOWN, coordsMouseDown);

			coordsMouseDownPrev = coordsMouseDown;
			coordsMouseDown = null;
		}
		
		// マウスUpイベントの処理

		if (coordsMouseUp)
		{
			logger.debug("up");
		
			if (! coordsMouseUp.equals(coordsMouseUpPrev))
			{
				onMouseUpCommon(coordsMouseUp);
			}
		
			recentEvent = new InputEvent(EVENT_MOUSE_UP, coordsMouseUp);

			coordsMouseUpPrev = coordsMouseUp;
			coordsMouseUp = null;
		}
		
		// クリックイベントの処理

		if (coordsClick)
		{
			logger.debug("click");

			if (! coordsClick.isNeighbor(coordsClickPrev))
			{
				onClickCommon(coordsClick);
			}
			
			recentEvent = new InputEvent(EVENT_CLICK, coordsClick);

			coordsClickPrev = coordsClick;
			coordsClick = null;
		}
		executing = false;
		
	}
}


//
//	入力開始
//
function startInput()
{	
	
	if(!flg_initInput)
	{
		initInput();
		flg_initInput = true;
	}
	changeModeDisp(mode_input);
	
	//マウスイベントの設定

	var config	= configList[mode_input];
	
	if (config)
	{
		intervalCheck	= parseInt(config.interval);
		maxPoints	= parseInt(config.maxPoints);
		
		if (eventLayer)
		{
			eventLayer.onclick		= config.click;
			eventLayer.ondblclick	= config.dblclick;
			eventLayer.onmousedown	= config.mousedown;
			eventLayer.onmouseup	= config.mouseup;
			eventLayer.onmousemove	= config.mousemove;
			eventLayer.onmouseover	= config.mouseover;
			eventLayer.onmouseout	= config.mouseout;
			
			eventLayer.style.cursor	= "crosshair";
		}	
	}
	else
	{
		intervalCheck = 500;
		maxPoints = 150;
		if (eventLayer)
		{
			eventLayer.onclick		= null;
			eventLayer.ondblclick	= null;
			eventLayer.onmousedown	= null;
			eventLayer.onmouseup	= null;
			eventLayer.onmousemove	= null;
			eventLayer.onmouseover	= null;
			eventLayer.onmouseout	= null;
			
			eventLayer.style.cursor	= "crosshair";
		}
	}
	intervalId	= window.setInterval("checkEvent();", intervalCheck);
	
	setInputButtonView(-1,-1,1);
}

//描画スタイルの変更をクリア
function clearChangeStyle()
{
	var node=document.getElementsByName("draw_select");
	
	if(node)
	{
		for(var i=0;i<node.length;i++)
		{
			node[i].options[0].selected=true;
		}
	}
}

//
//	イベント
//
function InputEvent(type, coords)
{
	this.type = type;
	this.coords = coords;
}

//
//	イベント関連の設定をクリア
//
function clearEvent()
{
	intervalCheck		= -1;
	if (intervalId)
	{
		window.clearInterval(intervalId);
	}

	coordsClick			= null;
	coordsClickPrev		= null;
	coordsDblClick		= null;
	coordsMouseDown		= null;
	coordsMouseDownPrev	= null;
	coordsMouseUp		= null;
	coordsMouseUpPrev	= null;
	coordsMouseMove		= null;
	coordsMouseMovePrev	= null;
	coordsMouseOver		= null;
	coordsMouseOut		= null;
	recentEvent			= null;
}

//
// クリックイベント
//
function onClick(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		
		coordsClick = coords;
	}
}

//
//	クリックイベント共通関数
//
function onClickCommon(coords)
{	
	switch (mode_input)
	{
		case INPUT_POINT:
		
			//setIcon(coords);
			completeIcon(coords);
			break;	
		
		case INPUT_TEXT:
		
			setText(coords);
		
			break;
			
		case INPUT_POLYLINE:
		
			setPolyline(coords);
			break;
			
		case INPUT_POLYGON:
		
			setPolygon(coords);
			break;
			
		case INPUT_RECT:
		
			setRect(coords);
			break;
			
		case INPUT_CIRCLE:	
			
			//setCircle(coords);
			completeCircle(coords);
			break;	
			
		case INPUT_POINTS:
			
			setPoints(coords);	
			break;
			
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}


//
//	ダブルクリック
//
function onDblClick(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsDblClick = coords;
	}
}

//
//	ダブルクリックイベント共通関数
//
function onDblClickCommon(coords)
{
	switch (mode_input)
	{
		case INPUT_POLYLINE:

			endPolyline(coords);

			break;
			
		case INPUT_POLYGON:

			endPolygon(coords);
			
			break;
			
		case INPUT_RECT:
		
			break;
			
		case INPUT_CIRCLE:
		
			break;
			
		case INPUT_POINTS:
		
			break;
						
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}
//
//	マウスボタンDown
//
function onMouseDown(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsMouseDown = coords;	
	}
}

//
//	マウスDown共通関数
//
function onMouseDownCommon(coords)
{
	mouse_do_flg=true;
	switch (mode_input)
	{
		case INPUT_POLYLINE:

			break;
			
		case INPUT_POLYGON:
		
			break;
			
		case INPUT_RECT:

			break;
			
		case INPUT_CIRCLE:
				
			break;
		
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}

//
//	マウスボタンUp
//
function onMouseUp(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsMouseUp = coords;
	}
}

//
//	ドキュメントのマウス移動
//
function onMouseUpDocument(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsMouseUp = coords;
	}	
}

//
//	マウスUp共通関数
//
function onMouseUpCommon(coords)
{mouse_do_flg=false;
	switch (mode_input)
	{
		case INPUT_POLYLINE:

			break;
			
		case INPUT_POLYGON:
		
			break;
			
		case INPUT_RECT:

			break;
			
		case INPUT_CIRCLE:
			
			break;
			
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}

//
//	マウス移動
//
function onMouseMove(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsMouseMove = coords;
	}
}

//
//	ドキュメントのマウス移動
//
function onMouseMoveDocument(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		if (! evt && window.event)
		{
			evt = window.event;
		}
		var coords = getPositionedEventCoords(evt);
		coordsMouseMove = coords;
	}	
}

//
//	マウス移動共通関数
//
function onMouseMoveCommon(coords)
{
	switch (mode_input)
	{
		case INPUT_POINT:
		
			moveIcon(coords);
	
			break;
			
		case INPUT_TEXT:
		
			moveText(coords);
	
			break;
			
		case INPUT_POLYLINE:

			movePolyline(coords);
			
			break;
			
		case INPUT_POLYGON:
			
			movePolygon(coords);
			
			break;
			
		case INPUT_RECT:
		
			moveRect(coords);
			
			break;
			
		case INPUT_CIRCLE:
			
			//move_Circle(coords);
			moveCircle(coords);
			
			break;
			
		case INPUT_POINTS:
			
			moveDummyPoint(coords);
			
			break;
				
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}


//
// マウスオーバー
//
function onMouseOver(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsMouseOver = coords;
	}
}


//
//	マウスオーバー共通関数
//
function onMouseOverCommon(coords)
{	
	switch (mode_input)
	{
		case INPUT_POINT:
		
			drawTempIcon(coords);
			break;	
		
		case INPUT_TEXT:
		
			drawTempText(coords);
			break;
			
		case INPUT_POLYLINE:
		
			break;
			
		case INPUT_POLYGON:
			
			break;
			
		case INPUT_RECT:
		
			break;
			
		case INPUT_CIRCLE:	
			
			////setCircle(coords);
			drawTempCircle(coords);
			break;
			
		case INPUT_POINTS:	
			
			showDummyPoint(coords);
			break;		
			
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}

//
// マウスアウトイベント
//
function onMouseOut(evt)
{
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (! executing)
	{
		var coords = getPositionedEventCoords(evt);
		coordsMouseOut = coords;
	}
}
//
//	マウスアウトイベント共通関数
//
function onMouseOutCommon(coords)
{	
	switch (mode_input)
	{
		case INPUT_POINT:
		
			clearInputItem(coords);
			break;	
		
		case INPUT_TEXT:
		
			clearInputItem(coords);
			break;
			
		case INPUT_POLYLINE:
		
			break;
			
		case INPUT_POLYGON:
			
			break;
			
		case INPUT_RECT:
		
			break;
			
		case INPUT_CIRCLE:	
			//
			clearInputItem(coords);
			
			break;	
				
		case INPUT_POINTS:	
			
			clearDummyPoint();
			
			break;	
		case NONE:
		
			break;
			
		default:
		
			break;
	}
}


//指定図形削除
function deleteItem()
{	
	if(input_item)
	{
		input_item.clear();
		input_item = null;
	}
	numPoints = 0;
}


//
//	一手戻す(入力確定前の図形のみ)
//
function cancelPreviousInput()
{
	var result = false;
	var s = 0;
	var p = 0;
	var c = 0;

	switch (mode_input)
	{
		case INPUT_POINT:
		
			break;
		
		case INPUT_TEXT:
		
			break;
		
		case INPUT_POLYLINE:
		
			// 直前の入力を破棄する

			if (numPoints > 0)
			{
				segments[numPoints - 1].clear();
				numPoints --;
				segments.length = numPoints;
				result = true;
			}
			
			break;
			
		case INPUT_POLYGON:
		
			// 直前の入力を破棄する

			if (numPoints > 0)
			{
				segments[numPoints - 1].clear();
				numPoints --;
				segments.length = numPoints;
				result = true;
			}
			
			// パスを閉じるための線分を破棄／再描画
			if (numPoints == 1)
			{
				segments[0].clear();
				numPoints --;
				segments.length = numPoints;
				result = true;
			}
			else if (numPoints > 0)
			{
				var p0 = segments[0].getStart();
				var pn = segments[numPoints - 1].getEnd();
				p0.setX(pn.getX());
				p0.setY(pn.getY());
				segments[0].redraw();
			}
			break;
			
		case INPUT_RECT:
		
			// 直前の入力を破棄する

			if (numPoints > 0)
			{
				diagonal=null;
				dummyRect.style.display="none";
				dummyRect.parentNode.removeChild(dummyRect);
				dummyRect=null;
				numPoints=0;

				result = true;
			}
			break;
			
		case INPUT_CIRCLE:
		
			if (input_item)
			{
				input_item.clear();
				input_item = null;
				result = true;
				numPoints=0;
			}
			break;
			
		case INPUT_POINTS:
		
			// 直前の入力を破棄する

			if (numPoints > 0)
			{
				points[numPoints - 1].clear();
				numPoints --;
				points.length = numPoints;
				result = true;
			}
			
			break;
			
		case NONE:
		
			break;
			
		default:
		
			break;
	}
	if(numPoints == 0)
	{
		p = -1;
	}	
	
	setInputButtonView(s,p,c);
	
	return result;
}


/*アイコン描画*/
function setIcon(coords)
{
	if (numPoints == 0)
	{
		numPoints = 1;
		var p = new InputPoint(coords.x, coords.y);
		input_item = new InputIcon(ITEM_ID , p , IMAGE_ICON , REF_NO);
		input_item.draw();
		flg_viewLock = true;
		
		completeInput(input_item);
	}
}

function drawTempIcon(coords)
{
	if (input_item)
	{	
		input_item.clear();
		input_item=null;
	}
	// 入力開始

	var p = new InputPoint(coords.x,coords.y);
	input_item = new InputIcon(ITEM_ID,p, IMAGE_ICON,REF_NO);
	input_item.draw();
	flg_viewLock = true;
	setInputButtonView(-1,0,1);
	
}
function moveIcon(coords)
{
	if(input_item)
	{
		var c = new InputPoint(coords.x, coords.y);
		
		input_item.redraw(c);
	}
}

function completeIcon(coords)
{
	var c = new InputPoint(coords.x, coords.y);
	if(input_item)
	{
		input_item.redraw(c);
	}
	else
	{
		drawTempIcon(coords);
	}
	
	flg_viewLock = true;
	
	completeInput(input_item);
}






/*テキスト描画*/
function setText(coords)
{
	if (numPoints == 0)
	{
		numPoints = 1;
		var p = new InputPoint(coords.x, coords.y);
		input_item = new InputText(p, IMAGE_TEXT);
		input_item.draw();
		flg_viewLock = true;
	
		completeInput(input_item);
	}
}
function moveText(coords)
{
	if(input_item)
	{
		var c = new InputPoint(coords.x, coords.y);
		
		input_item.redraw(c);
	}
}
function drawTempText(coords)
{
	if (input_item)
	{	
		input_item.clear();
		input_item=null;
	}
	// 入力開始

	var p = new InputPoint(coords.x,coords.y);
	input_item = new InputText(p, IMAGE_TEXT);
	input_item.draw();
	flg_viewLock = true;
	setInputButtonView(-1,0,1);
}

/*線描画*/
function setPolyline(coords)
{
	// 直前の線分を確定する

	//logger.debug(numPoints);
	if (numPoints > 0)
	{
		var p = segments[numPoints - 1].getEnd();
		p.setX(coords.x);
		p.setY(coords.y);
		segments[numPoints - 1].redraw();
	}
	// 線分を追加する
	var point1 = new InputPoint(coords.x, coords.y);
	var point2 = new InputPoint(coords.x, coords.y);
	segments[numPoints] = new InputSegment(point1, point2, numPoints, maxPoints);
	segments[numPoints].draw();
	flg_viewLock = true;
	
	numPoints ++;
	
	//logger.debug(numPoints);
	setInputButtonView(-1,1,0);
}
/*線移動*/
function movePolyline(coords)
{
	if (numPoints > 0)
	{
		// 座標を更新
		// 再描画
		var p = segments[numPoints - 1].getEnd();
		if (p)
		{
			p.setX(coords.x);
			p.setY(coords.y);
			segments[numPoints - 1].redraw();
		}
	}
}
/*線確定*/
function endPolyline(coords)
{
	// 直前の線分を確定する

	/*var point1 = new InputPoint(coords.x, coords.y);
	var point2 = new InputPoint(coords.x, coords.y);
	segments[numPoints] = new InputSegment(point1, point2, numPoints, maxPoints);
	segments[numPoints].draw();
	numPoints ++;*/
	
	//logger.debug(numPoints);
	if (numPoints > 0)
	{
		var p1 = segments[numPoints - 1].getStart();
		var p2 = segments[numPoints - 1].getEnd();
		p2.setX(coords.x);
		p2.setY(coords.y);
		if (p1.equals(p2))
		{
			segments[numPoints - 1].clear();

			numPoints --;
			segments.length = numPoints;
		}
		else
		{
			segments[numPoints - 1].redraw();
		}
	}
	
	//logger.debug(numPoints);
	if (segments.length >= 1)
	{	
		input_item=new SimpleItem(segments, TYPE_POLYLINE);
		
		completeInput(input_item);	
	}
	else
	{
		alert("線には最低２点必要です");
	}
}

/*面描画開始*/
function setPolygon(coords)
{	
	// 直前の線分を確定する

	//logger.debug(numPoints);
	if (numPoints > 0)
	{
		var p = segments[numPoints - 1].getEnd();
		
		p.setX(coords.x);
		p.setY(coords.y);
		segments[numPoints - 1].redraw();
		//segments[numPoints - 1].adjust();
	}
	else
	{
		var point1 = new InputPoint(coords.x, coords.y);
		var point2 = new InputPoint(coords.x, coords.y);
		segments[numPoints] = new InputSegment(point1, point2, numPoints, maxPoints);
		segments[numPoints].draw();
		flg_viewLock = true;
		numPoints++;
		
	//logger.debug(numPoints);
	}
	// 線分を追加する
	var point1 = new InputPoint(coords.x, coords.y);
	var point2 = new InputPoint(coords.x, coords.y);
	segments[numPoints] = new InputSegment(point1, point2, numPoints, maxPoints);
	segments[numPoints].draw();
	flg_viewLock = true;
	numPoints ++;
	//logger.debug(numPoints);
	setInputButtonView(-1,1,0);
}
function movePolygon(coords)
{
	if (numPoints > 0)
	{
		// 座標を更新
		var p0 = segments[0].getStart();
		if (p0)
		{
			p0.setX(coords.x);
			p0.setY(coords.y);
		}
		var p = segments[numPoints - 1].getEnd();
		if (p)
		{
			p.setX(coords.x);
			p.setY(coords.y);
		}
		
		// 再描画
		if (p0)
		{
			segments[0].redraw();
		}
		if (p)
		{
			segments[numPoints - 1].redraw();
		}
	}
}
/*面確定*/
function endPolygon(coords)
{
	// 最初の線分を確定する

	/*var point1 = new InputPoint(coords.x, coords.y);
	var point2 = new InputPoint(coords.x, coords.y);
	segments[numPoints] = new InputSegment(point1, point2, numPoints, maxPoints);
	segments[numPoints].draw();
	numPoints ++;
	*/
	
	//logger.debug(numPoints);
	if (numPoints > 0)
	{
		// パスを閉じるための線分の座標を確定

		var p0 = segments[0].getStart();
		p0.setX(coords.x);
		p0.setY(coords.y);
		segments[0].redraw();

		// 直前の線分を確定する

		var p1 = segments[numPoints - 1].getStart();
		var p2 = segments[numPoints - 1].getEnd();
		p2.setX(coords.x);
		p2.setY(coords.y);
		if (p1.equals(p2))
		{
			segments[numPoints - 1].clear();
			
			numPoints --;
			segments.length = numPoints;
		}
		else
		{
			segments[numPoints - 1].redraw();
			//segments[numPoints - 1].adjust();
		}
	}
	//logger.debug(numPoints);
	if (segments.length >= 3)
	{
		input_item=new SimpleItem(segments, TYPE_POLYGON);
	
		numPoints=0;
		
		completeInput(input_item);	
	}
	else
	{
		alert("面には最低３点必要です");
	}
}
		
/*矩形描画*/
function setRect(coords)
{
	if (numPoints == 0)
	{
		// 入力開始

		numPoints = 1;
		var p1 = new InputPoint(coords.x, coords.y);
		var p2 = new InputPoint(coords.x, coords.y);
		diagonal = new InputSegment(p1, p2);
			
		if (! dummyRect)
		{
			dummyRect = document.createElement("div");
			dummyRect.className = CSS_AREA;
			
			if (INPUT_COLOR)
			{
				dummyRect.style.borderColor=(save_mode == 1 || save_mode == 2)?"#FF0000":INPUT_COLOR;
			}
			dummyRect.style.backgroundColor = "Transparent";
			if (INPUT_WIDTH)
			{
				dummyRect.style.borderWidth=INPUT_WIDTH;
			}
			
			canvasLayer.appendChild(dummyRect);
			
			/*
			dummyRect = document.createElement("img");
			dummyRect.className = CSS_AREA;
			
			if (INPUT_COLOR)
			{
				dummyRect.style.borderColor=(save_mode == 1 || save_mode == 2)?"#FF0000":INPUT_COLOR;
			}
			dummyRect.style.backgroundColor = "Transparent";
			if (INPUT_WIDTH)
			{
				dummyRect.style.borderWidth=INPUT_WIDTH;
			}
			
			dummyRect.src = IMAGE_BLANK;
			canvasLayer.appendChild(dummyRect);*/
		}				
		dummyRect.style.left = coords.x;
		dummyRect.style.top = coords.y;
		
		dummyRect.style.width = 0;
		dummyRect.style.height = 0;
		dummyRect.style.display = "block";
		
		flg_viewLock = true;
		setInputButtonView(-1,1,0);
	}
	else
	{
		// 入力終了

		diagonal.getEnd().setX(coords.x);
		diagonal.getEnd().setY(coords.y);

		var p1 = diagonal.getStart();			
		var p2 = diagonal.getEnd();			
		
		segments[0] = new InputSegment(p1, p2,"0");	
		
		input_item=new SimpleItem(segments, TYPE_RECT);
		
		completeInput(input_item);
		
		/*dummyRect.parentNode.removeChild(dummyRect);
		dummyRect = null;
		*/
	}
}
function moveRect(coords)
{
	if (dummyRect)
	{
		var p1 = diagonal.getStart();
		var p2 = diagonal.getEnd();

		p2.setX(coords.x);
		p2.setY(coords.y);
		
		dummyRect.style.left	= Math.min(p1.getX(), p2.getX());
		dummyRect.style.top		= Math.min(p1.getY(), p2.getY());
		dummyRect.style.width	= Math.max(Math.abs(p2.getX() - p1.getX()) - rectBorder, 0);
		dummyRect.style.height	= Math.max(Math.abs(p2.getY() - p1.getY()) - rectBorder, 0);
	}
}

/*円描画*/

//半径をドラッグにより指定する描画方法----------------------------------------------------------------------------------------------
function setCircle(coords)
{
	if (! input_item)
	{	
		var c = new InputPoint(coords.x, coords.y);
		var r = 1;
		input_item = new InputCircle(c, r, maxPoints);
		input_item.xmin = 0;
		input_item.ymin = 0;
		input_item.xmax = map_width;
		input_item.ymax = map_height;
		input_item.draw();	
		flg_viewLock = true;
		setInputButtonView(-1,1,0);
	}
	else
	{	
		// 入力終了

		var c = input_item.getCenter();
		var r = parseInt(Math.sqrt((c.getX() - coords.x) * (c.getX() - coords.x) + (c.getY() - coords.y) * (c.getY() - coords.y)));
		input_item.setRadius(r);	
		
		completeInput(input_item);
	}
}
function move_Circle(coords)
{
	if(input_item)
	{
		var c = input_item.getCenter();
		var r = parseInt(Math.sqrt((c.getX() - coords.x) * (c.getX() - coords.x) + (c.getY() - coords.y) * (c.getY() - coords.y)));
		input_item.setRadius(r);
		input_item.redraw();
	}
}
//ここまで：半径をドラッグにより指定する描画方法----------------------------------------------------------------------------------------


//指定半径の疑似円を表示しながら中心を指定する方法--------------------------------------------------------------------------------------
var draw_radius=null;

function drawTempCircle(c)
{
	if (input_item)
	{	
		input_item.clear();
		input_item=null;
	}
	
	var f = true;//checkRad();
	if(f)
	{	
		// 入力開始

		var p = new InputPoint(c.x,c.y);
		var r = draw_radius * map_width/(map_maxX-map_minX);
		input_item = new InputCircle(p, r);
		input_item.xmin = 0;
		input_item.ymin = 0;
		input_item.xmax = map_width;
		input_item.ymax = map_height;
		input_item.draw();	
		flg_viewLock = true;
		setInputButtonView(-1,0,1);
	}
}
function clearInputItem()
{
	if(input_item)
	{
		input_item.clear();
		input_item=null;
	}
}


function moveCircle(coords)
{
	if(input_item)
	{
		var c = new InputPoint(coords.x, coords.y);
		input_item.setCenter(c);	
		input_item.redraw();
	}
}

function completeCircle(coords)
{	
	var p = new InputPoint(coords.x, coords.y);
		

	input_item.setCenter(p);
	
	completeInput(input_item);
}
//ここまで：指定半径の疑似円を表示しながら中心を指定する方法-----------------------------------------------------------------------------

/* ダミーのアイコン表示 */
function showDummyPoint(coords)
{
	// 入力開始

	var p = new InputPoint(coords.x,coords.y);
	dymmy_point = new InputIcon("rt",p, IMAGE_ICON,6);
	dymmy_point.draw();
//	flg_viewLock = true;
	setInputButtonView(-1,0,1);
}

/* ダミーアイコン移動 */
function moveDummyPoint(coords)
{
	if(dymmy_point)
	{
		var c = new InputPoint(coords.x, coords.y);
		
		dymmy_point.redraw(c);
	}
}

/*アイコン描画*/
function setPoints(coords)
{
	if(dymmy_point)
	{
		// 点を追加する
		var p = new InputPoint(coords.x, coords.y);
		
		points[numPoints] = new InputIcon(ITEM_ID ,p, IMAGE_ICON,6);
		points[numPoints].draw();
	
		numPoints ++;
		setInputButtonView(-1,1,0);
		
		if(numPoints ==maxPointsNum)
		{
		/* ポイント数の上限が定義されている場合


		   その数に達したときに自動的に行う処理を以下に記述 */
			clearDummyPoint();
		
			input_item=new SimpleItem(points, TYPE_POINTS);
		
			completeInput(input_item);	
		}
		else if(numPoints == 0)
		{
			var node = document.getElementById("modedisp_contents");
			if(node)
			{
				IMAGE_ICON = routeGoalIconImage;
				node.innerHTML = "クリック：終点を指定します";
			}
		}
	}
}

/* ダミーアイコン削除 */
function clearDummyPoint()
{
	if(dymmy_point)
	{
		dymmy_point.clear();
		dymmy_point=null;
	}
}

///* input.js */
//	入力完了イベント

//
function completeInput(item)
{	
	var removemsg = null;
	setMapLoadingLayer(); 
		
	if(cur_mode == 'draw_temp')//(save_mode == 0)//一時図形
	{
		con_style = setTempItemStyle(item);
		con_coords = item.toStringRealCM(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);
		respons = GetRequestItem('reqTempItem');
		removemsg = clearMemo;
	}
	else if(cur_mode == 'add_feature')//(save_mode == 1)//保存図形
	{	
		con_style = setTempItemStyle(item);
		con_coords = item.toStringRealCM(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);
	}
	else if(cur_mode == 'post')//(save_mode == 2)//投稿図形
	{
		con_style = setTempItemStyle(item);
		con_coords = item.toStringRealCM(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);
		
		respons = GetRequestItem('reqPostAdd');
	}
	//}
	else if(cur_mode == 'measure_length')
	{
		con_coords = input_item.toStringReal(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);	
		con_measuretype = "length";
		con_style  = "&lColor="+INPUT_COLOR;
		respons = GetRequestItem('reqMeasureResult');
		removemsg = clearMeasure;
	}
	else if(cur_mode == 'measure_area')
	{
		con_coords = item.toStringReal(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);	
		con_measuretype = "area";
		con_style  = "&lColor="+INPUT_COLOR;
		respons = GetRequestItem('reqMeasureResult');
		removemsg = clearMeasure;
	}
	/*else if(cur_mode == 'search_route')
	{
		con_coords = routeStartPointM+","+item.toStringReal(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);	
		routeGoalPoint = item.toStringRealCM(map_minX,map_maxX,map_width,map_minY,map_maxY,map_height);
		con_style = setTempItemStyle(item);	
		//con_routerad = Math.max(Math.round((routeRadius_p * (map_maxX-map_minX)/map_width)*1000)/1000,routeRadius_m);
		
		/*ルート検索処理呼び出し

		respons = GetRequestItem('reqSearchRouteResult');
		removemsg = clearRoute;
	}*/
	
	//消しゴムボタンを表示する
	if(cur_mode != 'post' && cur_mode != 'start_route')
	{
		figure_flg = true;
		
		if(removeItemMsg.indexOf(removemsg,0) == -1)
		{
			removeItemMsg += removemsg;
		}
		
		var node = document.getElementById("clear_temp");
		if(node)
		{
			node.style.display = "inline";
		}
	}
	
	numPoints = 0;
	flg_viewLock = false;
	//modeChange(DEF_MODE);
	//input_item.clear();
	item.clear();
	if(input_item)
	{
		input_item = null;
	}
	if(dummyRect)
	{
		dummyRect.parentNode.removeChild(dummyRect);
		dummyRect = null;
	}
	
	if(CONTINUE_MODE && cur_mode != 'start_route'&& cur_mode != 'search_route')
	{
		var cf = false;
		for (var i = 0;i<CONTINUE_MODE.length;i++)
		{
			if(cur_mode == CONTINUE_MODE[i])
			{
				cf = true;
				break;
			}
		}
		if(!cf)
		{
			cancelInput();
		}
	}
}


function check_flg_viewLock()
{
	if(flg_viewLock)
	{	
		var mode = gis.modeManager.getCurrentMode();
		
		var msg= '';
		
		switch (mode)
		{
			case 'draw_temp':
				msg = '描画途中の図形は破棄されます。よろしいですか？';
				break;
				
			case 'add_feature':
				msg = '描画途中の図形は破棄されます。よろしいですか？';
				break;
				
			case 'post':
				msg = '描画途中の図形は破棄されます。よろしいですか？';
				break;
				
			case 'measure_length':
				msg = '計測途中の図形は破棄されます。よろしいですか？';
				break;
				
			case 'measure_area':
				msg = '計測途中の図形は破棄されます。よろしいですか？';
				break;	
			
			case 'search_route':
				msg = '始点は破棄されます。よろしいですか？';
				break;	
			
			default:
				break;
		}
		
		var f = confirm(msg);
		
		if(!f)
		{
			return false;
		}
		else
		{
			initInput();
			
			input_item = null;
			setCanvasLayer();
			flg_viewLock = false;
			modeChange(DEF_MODE);
			return true;
		}
	}
	else
	{
		return true;
	}
}


//
//	アイコン
//
function InputIcon(id, point, url , ref )
{
	if (!point || !url)
	{
		alert("Icon : コンストラクタの引数が不正です");
		return;
	}

	this.id			= id ? id :"ip";
	this.point		= point;
	this.url		= url;
	this.ref		= ref ? ref : 4 ;
	var _image		= new Image();
	var _node		= null;
		
	if (this.url)
	{
		_image.src = this.url;
		_node = document.createElement("img");
		_node.id				= this.id;
		_node.className			= CSS_ICON;
		_node.style.display 	= "none";
		canvasLayer.appendChild(_node);
	}

	this.getID = function()
	{
		return this.id;
	}

	this.setID = function(id)
	{
		this.id = id;
	}

	this.getPoint = function()
	{
		return this.point;
	}
	
	this.setPoint = function(point)
	{
		this.point = point;
	}
	
	this.setWidth = function()
	{
		if(!(INPUT_ISIZE == -1))
		{/* アイコンサイズを画面上のmm単位に設定 */
			_node.style.width = INPUT_ISIZE * (DISPLAY_PPC) /10;
			
			/*_node.style.width = INPUT_ISIZE * (DISPLAY_DPI / 2.54) /10;*/
			
			INPUT_SIZE = Math.round(INPUT_ISIZE * (map_maxX-map_minX)/map_width/2.54)*1000;
			
		}
		else if(!(INPUT_SIZE == -1))
		{/* 実空間のcm単位に設定 */
			_node.style.width = Math.round(INPUT_SIZE *  map_width/(map_maxX-map_minX)*1000)/100000;
		}
		else if(_image)
		{/* イメージのサイズをそのまま利用 */
			_node.style.width = _image.width;
		}
		else
		{/* 普通ならありえない */
			_node.style.width = 0;
		}
	}
	
	this.setHeight = function()
	{
		if(!(INPUT_ISIZE == -1))
		{/* アイコンサイズを画面上のmm単位に設定 */
			_node.style.height = INPUT_ISIZE * (DISPLAY_PPC) /10;
			/*_node.style.height = INPUT_ISIZE * (DISPLAY_DPI / 2.54) /10;*/
			
			INPUT_SIZE = Math.round(INPUT_ISIZE * (map_maxX-map_minX)/map_width/2.54)*1000;
		}
		else if(!(INPUT_SIZE == -1))
		{/* 実空間のcm単位に設定 */
			_node.style.height = Math.round(INPUT_SIZE *  map_height/(map_maxY-map_minY)*1000)/100000;
		}
		else if(_image)
		{/* イメージのサイズをそのまま利用 */
			_node.style.height = _image.height;
		}
		else
		{/* 普通ならありえない */
			_node.style.height = 0;
		}
	}
	//指定したポイントにアイコンの中心を指定するために
	//アイコンのサイズを取得する

	this.getWidth = function()
	{
		if (_node)
		{
			var w = _node.style.width;
			w = w.replace("px","");
			w = w.replace("pt","");
			return eval(w);
		}
		else
		{
			return 0;
		}
	}
	this.getHeight = function()
	{
		if (_node)
		{
			var h = _node.style.height;
			h = h.replace("px","");
			h = h.replace("pt","");
			return eval(h);
			//return eval(_node.style.height.replace("px",""));
		}
		else
		{
			return 0;
		}
	}
	/**/

	this.redraw = function(c)
	{
		this.setPoint(c);
		this.draw();
	}
	
	this.draw = function()
	{
		if (_node)
		{
			_node.src				= this.url;
			this.setWidth();
			this.setHeight();
			this.setPosition()
			//_node.style.left		= _point.getX() - this.getWidth()/ 2;
			//_node.style.top			= _point.getY() - this.getHeight()/ 2;
			
			//地図上になければ表示はしない

			if(this.point.getX()-2< 0 - this.getWidth()/2 || this.point.getX()+2> map_width + this.getWidth()/2  || this.point.getY()-2< 0 - this.getHeight()/2  || this.point.getY()+2>map_height + this.getHeight()/2 )
			{
				_node.style.display 	= "none";
			}
			else
			{
				_node.style.display 	= "block";
			}
		}
	}
	this.getRefarencePoint = function()
	{
		return this.ref;
	}
	this.setRefarencePoint = function(num)
	{
		this.ref = num;
	}
	this.setPosition = function()
	{
		var num = this.ref ? this.ref : 4 ;
		switch (num)
		{
			case 0:
				_node.style.left		= this.point.getX();
				_node.style.top			= this.point.getY();
				break;	
				
			case 1:
				_node.style.left		= this.point.getX() - this.getWidth()/ 2;
				_node.style.top			= this.point.getY() ;
				break;
				
			case 2:
				_node.style.left		= this.point.getX() - this.getWidth();
				_node.style.top			= this.point.getY();
				break;
				
			case 3:
				_node.style.left		= this.point.getX();
				_node.style.top			= this.point.getY() - this.getHeight()/ 2;
				break;
				
			case 4:
				_node.style.left		= this.point.getX() - this.getWidth()/ 2;
				_node.style.top			= this.point.getY() - this.getHeight()/ 2;
				break;
				
			case 5:
				_node.style.left		= this.point.getX() - this.getWidth();
				_node.style.top			= this.point.getY() - this.getHeight()/ 2;
				break;	
			
			case 6:
				_node.style.left		= this.point.getX();
				_node.style.top			= this.point.getY() - this.getHeight();
				break;
				
			case 7:
				_node.style.left		= this.point.getX() - this.getWidth()/ 2;
				_node.style.top			= this.point.getY() - this.getHeight();
				break;
			
			case 8:
				_node.style.left		= this.point.getX() - this.getWidth();
				_node.style.top			= this.point.getY() - this.getHeight();
				break;
			
			default:
				_node.style.left		= this.point.getX() - this.getWidth()/ 2;
				_node.style.top			= this.point.getY() - this.getHeight()/ 2;
				break;
		}
	
	}

	this.clear = function()
	{
		if (_node)
		{	
			_node.parentNode.removeChild(_node);
			_node = null;
		}
	}
	
	this.getType = function()
	{
		return TYPE_POINT;
	}
	
	this.getCoords = function()
	{
		return this.point.toString();
	}

	this.toStringReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		return this.point.toStringReal(xmin, xmax, width, ymin, ymax, height);
	}
	
	this.toStringRealCM = function(xmin, xmax, width, ymin, ymax, height)
	{
		return this.point.toStringRealCM(xmin, xmax, width, ymin, ymax, height);
	}
	
	this.getExtent = function()
	{
		var xmin = this.point.getX() - this.getWidth() / 2;
		var ymin = this.point.getY() - this.getHeight() / 2;
		var xmax = this.point.getX() + this.getWidth() / 2;
		var ymax = this.point.getY() + this.getHeight() / 2;
		return new InputBoundingBox(this.xmin, this.ymin, this.xmax, this.ymax);
	}

	this.getExtentReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		var xminPx = this.point.getX() - this.getWidth() / 2;
		var yminPx = this.point.getY() - this.getHeight() / 2;
		var xmaxPx = this.point.getX() + this.getWidth() / 2;
		var ymaxPx = this.point.getY() + this.getHeight() / 2;
		var pmin = new InputPoint(xminPx, yminPx);
		var pmax = new InputPoint(xmaxPx, ymaxPx);
		var xminReal = Math.min(pmin.getXReal(xmin, xmax, width), pmax.getXReal(xmin, xmax, width));
		var yminReal = Math.min(pmin.getYReal(ymin, ymax, height), pmax.getYReal(ymin, ymax, height));
		var xmaxReal = Math.max(pmin.getXReal(xmin, xmax, width), pmax.getXReal(xmin, xmax, width));
		var ymaxReal = Math.max(pmin.getYReal(ymin, ymax, height), pmax.getYReal(ymin, ymax, height));
		return new InputBoundingBox(xminReal, yminReal, xmaxReal, ymaxReal);
	}
}


//
//	テキスト

//
function InputText(point, msg,id)
{
	if (!point || !msg)
	{
		alert("Text : コンストラクタの引数が不正です");
		return;
	}

	this.point		= point;
	this.id			= id ? id:"input_t";
	this.msg		= msg;
	var _node		= null;
	
	if (this.msg)
	{
		_node = document.createElement("div");
		_node.id				= this.id;
		_node.className			= CSS_TEXT;
		
		if (INPUT_FCOLOR)
		{
			_node.style.color=INPUT_FCOLOR;
		}
		//if (INPUT_FSIZE)
		//{
		//	_node.style.fontSize=INPUT_FSIZE;
		//}
		_node.style.display 	= "block";
		/*_node.style.fontSize = this.setSize();*/
		canvasLayer.appendChild(_node);
	}

	this.getPoint = function()
	{
		return this.point;
	}
	
	this.setPoint = function(point)
	{
		this.point = point;
	}
	
	this.setMsg = function(m)
	{
		this.msg = m;	
	}
	
	this.setSize = function()
	{
		if(!(INPUT_FSIZE == -1))
		{/* アイコンサイズを画面上のmm単位に設定 */
			
			INPUT_SIZE = Math.round(INPUT_FSIZE/DISPLAY_DPI*2.54*map_scale);
		
			return INPUT_FSIZE ;//* (DISPLAY_DPI / 2.54) /10;
		}
		else if(!(INPUT_SIZE == -1))
		{/* 実空間のcm単位に設定 */
			return Math.round(INPUT_SIZE *  map_height/(map_maxY-map_minY)*1000)/100000;
		}
		else
		{/* 普通ならありえない */
			return 0;
		}
		return 0;
	}
	this.getSize = function()
	{
		if (_node)
		{
			var h = _node.style.fontSize;
			h = h.replace("px","");
			h = h.replace("pt","");
			return eval(h);
			//return eval(_node.style.fontSize.replace("px",""));
		}
		else
		{
			return 0;
		}
	}

	this.redraw = function(c)
	{
		this.setPoint(c);
		this.draw();
	}
	
	this.draw = function()
	{
		if (_node)
		{	
			_node.innerHTML			= this.msg;
			_node.style.fontSize	= this.setSize();
			_node.style.left		= this.point.getX();
			_node.style.top			= this.point.getY()-this.getSize();
			_node.display			= "block";
		}
	}

	this.clear = function()
	{
		if (_node)
		{
			_node.parentNode.removeChild(_node);
			_node = null;
		}
	}
	
	this.getType = function()
	{
		return TYPE_TEXT;
	}
	
	this.getCoords = function()
	{
		return this.point.toString();
	}

	this.toStringReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		return this.point.toStringReal(xmin, xmax, width, ymin, ymax, height);
	}
	
	this.toStringRealCM = function(xmin, xmax, width, ymin, ymax, height)
	{
		return this.point.toStringRealCM(xmin, xmax, width, ymin, ymax, height);
	}
	
	this.getExtent = function()
	{
		var xmin = this.point.getX() - this.getWidth() / 2;
		var ymin = this.point.getY() - this.getHeight() / 2;
		var xmax = this.point.getX() + this.getWidth() / 2;
		var ymax = this.point.getY() + this.getHeight() / 2;
		return new InputBoundingBox(this.xmin, this.ymin, this.xmax, this.ymax);
	}

	this.getExtentReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		var xminPx	 = this.point.getX() - this.getWidth() / 2;
		var yminPx   = this.point.getY() - this.getHeight() / 2;
		var xmaxPx   = this.point.getX() + this.getWidth() / 2;
		var ymaxPx   = this.point.getY() + this.getHeight() / 2;
		var pmin	 = new InputPoint(xminPx, yminPx);
		var pmax	 = new InputPoint(xmaxPx, ymaxPx);
		var xminReal = Math.min(pmin.getXReal(xmin, xmax, width), pmax.getXReal(xmin, xmax, width));
		var yminReal = Math.min(pmin.getYReal(ymin, ymax, height), pmax.getYReal(ymin, ymax, height));
		var xmaxReal = Math.max(pmin.getXReal(xmin, xmax, width), pmax.getXReal(xmin, xmax, width));
		var ymaxReal = Math.max(pmin.getYReal(ymin, ymax, height), pmax.getYReal(ymin, ymax, height));
		return new InputBoundingBox(xminReal, yminReal, xmaxReal, ymaxReal);
	}
}

//
//	線分
//
function InputSegment(start, end,num,maxNodes)
{
	if (!start || !end )
	{
		alert("Segment : コンストラクタの引数が不正です");
		return;
	}

	this.start		= start;
	this.end		= end;
	this.id			= "is_"+num;
	this.maxNodes	= maxNodes;
	this.nodes		= new Array();
	
	var diffMax=null;
	
	
	// 最大ノード数が指定されたら予めノードを作成しておく
	if (this.maxNodes)
	{
		var i;
		for (i = 0; i < this.maxNodes; i++)
		{
			var _node = document.createElement("div");
			_node.id				= this.id + '_'+i;
			_node.className			= CSS_AREA;
			
			if (INPUT_COLOR)
			{
				_node.style.backgroundColor=(save_mode == 1 || save_mode == 2)?"#FF0000":INPUT_COLOR;
			}
			if (INPUT_WIDTH)
			{
				_node.style.width=INPUT_WIDTH;
				_node.style.height=INPUT_WIDTH;
			}
			
			_node.style.display 	= "none";
			canvasLayer.appendChild(_node);
			
			this.nodes[i] 				= _node;
			
			/*
			var _node = document.createElement("img");
			_node.id				= this.id + '_'+i;
			_node.className			= CSS_AREA;
			
			if (INPUT_COLOR)
			{
				_node.style.backgroundColor=(save_mode == 1 || save_mode == 2)?"#FF0000":INPUT_COLOR;
			}
			if (INPUT_WIDTH)
			{
				_node.style.width=INPUT_WIDTH;
				_node.style.height=INPUT_WIDTH;
			}
			
			_node.src				= IMAGE_BLANK;
			_node.style.display 	= "none";
			canvasLayer.appendChild(_node);
			
			this.nodes[i] 				= _node;*/
		}
	}
	
	this.getStart = function()
	{
		return this.start;
	}	

	this.getEnd = function()
	{
		return this.end;
	}

	this.toString = function()
	{
		return this.start.toString() + " " + this.end.toString();
	}
	
	this.toStringReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		return this.start.toStringReal(xmin, xmax, width, ymin, ymax, height) + " " + this.end.toStringReal(xmin, xmax, width, ymin, ymax, height)
	}

	this.redraw = function()
	{
		if (!this.maxNodes)
		{
			this.clear();
		}
		this.draw();
		
	}
	
	this.draw = function()
	{
		var diffX = Math.abs(this.start.getX() - this.end.getX());
		var diffY = Math.abs(this.start.getY() - this.end.getY());
		
		diffMax = Math.max(diffX, diffY);

		var x1 = this.start.getX();
		var y1 = this.start.getY();
		var x2 = this.end.getX();
		var y2 = this.end.getY();

		if (this.maxNodes)
		{
			if (this.maxNodes >= diffMax)
			{
				// ノードの最大数が与えられている場合は
				// 作成済みノードの表示のON/OFFを調整する
				var i;
				for (i = diffMax; i < this.maxNodes; i++)
				{
					var _node = this.nodes[i];
					if (_node)
					{
						_node.style.display = "none";
					}
				}
				for (i = 0; i < diffMax; i++)
				{
					var _node = this.nodes[i];
					if (_node)
					{
						_node.style.left		= x1 + (x2 - x1) * i / diffMax;
						_node.style.top			= y1 + (y2 - y1) * i / diffMax;
						_node.style.display	= "block";
					}
				}
			}
			else
			{
				for (i = 0; i < this.maxNodes; i++)
				{
					var _node = this.nodes[i];
					if (_node)
					{
						_node.style.left			=  x1 + (x2 - x1) * i / this.maxNodes;
						_node.style.top			= y1 + (y2 - y1) * i / this.maxNodes;
						_node.style.display	= "block";
					}
				}
			}
		}
		else
		{
			// ノードの最大数が与えられていない場合は
			// 線分を表現するノードを作成
			var i;		
			for (i = 0; i < diffMax; i++)
			{
				var _node = document.createElement("div");
				_node.id				= this.id +'_'+ i;
				_node.className			= CSS_AREA;
				
				if (INPUT_COLOR)
				{
					_node.style.backgroundColor=INPUT_COLOR;
				}
				if (INPUT_WIDTH)
				{
					_node.style.width=INPUT_WIDTH;
					_node.style.height=INPUT_WIDTH;
				}
				
				_node.style.left		=  x1 + (x2 - x1) * i / diffMax;
				_node.style.top			=  y1 + (y2 - y1) * i / diffMax;
				_node.style.display 	= "block";
				canvasLayer.appendChild(_node);
				
				/*
				var _node = document.createElement("img");
				_node.id				= this.id +'_'+ i;
				_node.className			= CSS_AREA;
				
				if (INPUT_COLOR)
				{
					_node.style.backgroundColor=INPUT_COLOR;
				}
				if (INPUT_WIDTH)
				{
					_node.style.width=INPUT_WIDTH;
					_node.style.height=INPUT_WIDTH;
				}
				
				_node.src				= IMAGE_BLANK;
				_node.style.left		=  x1 + (x2 - x1) * i / diffMax;
				_node.style.top			=  y1 + (y2 - y1) * i / diffMax;
				_node.style.display 	= "block";
				canvasLayer.appendChild(_node);*/
			}
		}
		//logger.debug(id);
	}

	this.clear = function()
	{
		var diffX = Math.abs(this.start.getX() - this.end.getX());
		var diffY = Math.abs(this.start.getY() - this.end.getY());
		var diffMax = Math.max(diffX, diffY);

		if (this.maxNodes)
		{
			// ノードの最大数が与えられている場合は
			// すべてのノードを削除する
			var i;
			for (i = 0; i < this.maxNodes; i++)
			{
				var _node = document.getElementById(this.id +'_'+ i);
				if (_node)
				{
					_node.parentNode.removeChild(_node);
					_node=null;
				}
			}
		}
		else
		{
			// ノードの最大数が与えられていない場合は
			// 線分を表現するノードを削除する
			var i;		
			for (i = 0; i < diffMax; i++)
			{
				var _node = document.getElementById(this.id +'_'+ i);
				if (_node)
				{
					_node.parentNode.removeChild(_node);
					_node=null;
				}
			}
		}
	}
	this.adjust = function()
	{
		var i;		
			for (i = this.maxNodes; i > diffMax; i--)
			{
				var _node = document.getElementById(this.id +'_'+ i);
				if (_node)
				{
					_node.parentNode.removeChild(_node);
					_node=null;
				}
			}
	
	}
	
	this.getType = function()
	{
		return TYPE_LINE;
	}
}


//
//	境界矩形
//
function InputBoundingBox(xmin, ymin, xmax, ymax)
{
	this.xmin = xmin;
	this.ymin = ymin;
	this.xmax = xmax;
	this.ymax = ymax;
	
	this.toString = function()
	{
		return this.xmin + "," + this.ymin + "," + this.xmax + "," + this.ymax;
	}
}


//
//  円

//
	function InputCircle(center, radius , id)
	{
		if (!center || !radius)
		{
			alert("Circle : コンストラクタの引数が不正です");
			return;
		}
		
		this.center 	= center;
		this.radius		= radius;
		this.id			= id ? id:"ic";
		this.numNodes	= Math.min(parseInt(360 * radius / 100),300);
		this.nodes		= new Array();
		
		this.xmin = 0;
		this.ymin = 0;
		this.xmax = Number.MAX_VALUE;
		this.ymax = Number.MAX_VALUE;
		
		//var _center 	= center;
		//var _radius		= radius;
		//var _id			= id ? id:"ic";
		//var _numNodes	= parseInt(360 * radius / 100);
		//var _nodes		= new Array();
		
			
		// 最大ノード数が指定されたら予めノードを作成しておく
		if (this.numNodes)
		{
			var i;
			for (i = 0; i < this.numNodes; i++)
			{
				var _node = document.createElement("div");
				_node.id				= this.id+i;
				_node.className			= CSS_AREA;	
				if (INPUT_COLOR)
				{
					_node.style.backgroundColor=(save_mode == 1 || save_mode == 2)?"#FF0000":INPUT_COLOR;
				}
				if (INPUT_WIDTH)
				{
					_node.style.width=INPUT_WIDTH;
					_node.style.height=INPUT_WIDTH;
				}			
				_node.style.display 	= "none";
				document.getElementById("dummyLayerContainer").appendChild(_node);
				this.nodes[i] 				= _node;
				
				/*
				var _node = document.createElement("img");
				_node.id				= this.id+i;
				_node.className			= CSS_AREA;	
				if (INPUT_COLOR)
				{
					_node.style.backgroundColor=(save_mode == 1 || save_mode == 2)?"#FF0000":INPUT_COLOR;
				}
				if (INPUT_WIDTH)
				{
					_node.style.width=INPUT_WIDTH;
					_node.style.height=INPUT_WIDTH;
				}			
				_node.src				= IMAGE_BLANK;
				_node.style.display 	= "none";
				document.getElementById("dummyLayerContainer").appendChild(_node);
				this.nodes[i] 				= _node;*/
			}
		}
		
		
		this.getId = function()
		{
			return this.id;
		}
		this.setId = function(id)
		{
			this.id = id;
		}
		
		this.getCenter = function()
		{
			return this.center;
		}
		this.setCenter = function(center)
		{
			this.center = center;
		}		
		this.getRadius = function()
		{
			return this.radius;
		}
		this.setRadius = function(radius)
		{
			this.radius = parseInt(radius);
			this.numNodes = parseInt(CIRCLE_DIVIDE_DRAW * radius / 100);
		}
				
		this.getCenterReal =function(xmin, xmax, width, ymin,ymax,height)
		{
			return this.center.toStringReal(xmin, xmax, width ,ymin, ymax, height);
		}
		this.getCenterRealCM =function(xmin, xmax, width, ymin, ymax, height)
		{
			return this.center.toStringRealCM(xmin, xmax, width, ymin, ymax, height);
		}	
		this.getRadiusReal =function(xmin, xmax, width)
		{
			return this.radius * (map_maxX - map_minX) / map_width;
		}
		this.getRadiusRealCM =function(xmin, xmax, width)
		{
			return this.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 (!this.numNodes)
			{
				this.clear();
			}
			this.draw();
		}
		
		this.draw = function()
		{
			var i;
			for (i = 0; i < this.numNodes; i++)
			{
				var _node = this.nodes[i];
				if (_node)
				{
					var x					= this.center.getX() + this.radius * Math.cos(Math.PI * 2 * i / this.numNodes);
					var y					= this.center.getY() + this.radius * Math.sin(Math.PI * 2 * i / this.numNodes);
					var isWithin			= (x >= this.xmin && x <= this.xmax && y >= this.ymin  && y <= this.ymax );
					
					_node.style.left		= x;
					_node.style.top			= y;
					_node.style.display	= ((isWithin) ? "block" : "none");
				}
			}
		}

		this.clear = function()
		{
			// ノードの最大数が与えられている場合は
			// すべてのノードを削除する
			var i=0;
			for (i = 0; i < this.numNodes; i++)
			{
				var _node = document.getElementById(this.id + i);
				if (_node)
				{
					_node.parentNode.removeChild(_node);
					_node=null;
				}
			}
		}
		
		
		this.getType = function()
		{
			return TYPE_CIRCLE;
		}
	}	


//
//	単純図形
//
function SimpleItem(elements, type, id)
{
	this.id = id ? id : "item";
	this.elements = elements;
	this.type = type;
	
	this.getId = function()
	{
		return this.id;
	}
	
	this.setId = function(_id)
	{
		this.id = _id;
	}
	
	this.draw = function()
	{
		var i;
		for(i=0;i<this.elements.length;i++)
		{
			this.elements[i].draw();
		
		}
	}
	
	this.clear = function()
	{
		var i;
		for(i=0;i<this.elements.length;i++)
		{
			this.elements[i].clear();
		
		}
	}
	
	this.getElementsNum = function()
	{
		return this.elements.length;
	}
	
	this.getType = function()
	{
		return this.type;
	}
	
	this.getCoords = function()
	{
		var coords = "";
		var i;
		if (this.elements)
		{
			if(this.type == TYPE_POINTS)
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getPoint().toString();
				}
			}
			else
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getStart().toString();
				}
				if (this.elements.length > 0)
				{
					coords += "," + this.elements[this.elements.length - 1].getEnd().toString();
				}
			}
			
		}
		return coords;
	}

	//頂点(実座標)を配列で返す
	this.getCoordsReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		var coords = new Array();
		if (this.elements)
		{
			var i;
			if(this.type == TYPE_POINTS)
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getPoint().getReal(xmin, xmax, width,ymin, ymax, height);
				}
			}
			else
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords[i] =  this.elements[i].getStart().getReal(xmin, xmax, width,ymin, ymax, height);		
				}
			/**/	if (this.elements.length > 0 && !(this.elements[_elements.length-1].getEnd().equals(this.elements[this.elements.length-1].getStart())))
				{
					coords[this.elements.length] = this.elements[this.elements.length-1].getEnd().getReal(xmin, xmax, width,ymin, ymax, height);
				}
			}
		}
		return coords;
	}
	
	this.toStringReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		var coords = "";
		if (this.elements)
		{
			var i;
			if(this.type == TYPE_POINTS)
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getPoint().toStringReal(xmin, xmax, width,ymin, ymax, height);
				}
			}
			else
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getStart().toStringReal(xmin, xmax, width,ymin, ymax, height);
				}
				if (this.elements.length > 0)
				{
					coords += "," + this.elements[this.elements.length - 1].getEnd().toStringReal(xmin, xmax, width,ymin, ymax, height);
				}
			}
		}
		return coords;
	}
	
	this.toStringRealCM = function(xmin, xmax, width, ymin, ymax, height)
	{
		var coords = "";
		if (this.elements)
		{
			var i;
			if(this.type == TYPE_POINTS)
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getPoint().toStringRealCM(xmin, xmax, width,ymin, ymax, height);
				}
			}
			else
			{
				for (i = 0; i < this.elements.length; i++)
				{
					coords += (("" != coords) ? "," : "") + this.elements[i].getStart().toStringRealCM(xmin, xmax, width,ymin, ymax, height);
				}
				if (this.elements.length > 0)
				{
					coords += "," + this.elements[this.elements.length - 1].getEnd().toStringRealCM(xmin, xmax, width,ymin, ymax, height);
				}
			}
		}
		return coords;
	}
	
	this.getExtent = function()
	{
		var extent = new InputBoundingBox(Number.MAX_VALUE, Number.MAX_VALUE, Number.MIN_VALUE, Number.MIN_VALUE);
		if (this.elements)
		{
			var i;
			for (i = 0; i < this.elements.length; i++)
			{
				var p1 = this.elements[i].getStart();
				extent.xmin = Math.min(extent.xmin, p1.getX());
				extent.ymin = Math.min(extent.ymin, p1.getY());
				extent.xmax = Math.max(extent.xmax, p1.getX());
				extent.ymax = Math.max(extent.ymax, p1.getY());

				var p2 = this.elements[i].getEnd();
				extent.xmin = Math.min(extent.xmin, p2.getX());
				extent.ymin = Math.min(extent.ymin, p2.getY());
				extent.xmax = Math.max(extent.xmax, p2.getX());
				extent.ymax = Math.max(extent.ymax, p2.getY());
			}
		}
		return extent;		
	}

	this.getExtentReal = function(xmin, xmax, width, ymin, ymax, height)
	{
		var extent = new InputBoundingBox(Number.MAX_VALUE, Number.MAX_VALUE, Number.MIN_VALUE, Number.MIN_VALUE);
		if (this.elements)
		{
			var i;
			for (i = 0; i < this.elements.length; i++)
			{
				var p1 = this.elements[i].getStart();
				extent.xmin = Math.min(extent.xmin, p1.getXReal(xmin, xmax, width));
				extent.ymin = Math.min(extent.ymin, p1.getYReal(ymin, ymax, height));
				extent.xmax = Math.max(extent.xmax, p1.getXReal(xmin, xmax, width));
				extent.ymax = Math.max(extent.ymax, p1.getYReal(ymin, ymax, height));

				var p2 = this.elements[i].getEnd();
				extent.xmin = Math.min(extent.xmin, p2.getXReal(xmin, xmax, width));
				extent.ymin = Math.min(extent.ymin, p2.getYReal(ymin, ymax, height));
				extent.xmax = Math.max(extent.xmax, p2.getXReal(xmin, xmax, width));
				extent.ymax = Math.max(extent.ymax, p2.getYReal(ymin, ymax, height));
			}
		}
		return extent;
	}
}





function setTempItemStyle(item)
{
	var primitive = item.getType();
	var style = "";	
	switch (primitive)
	{
		case TYPE_POINT:
		
			//style = "_&primitive=100&symbolNo="+ICON_NO+"&isize="+INPUT_ISIZE+"&size="+INPUT_SIZE+"&refpnt="+ICON_REFNO;
			style = "_&primitive=100&symbolNo="+ICON_NO+"&isize="+INPUT_ISIZE+"&size="+INPUT_SIZE+"&refpnt="+ICON_REFNO+"&basescale="+ICON_BASE_SCALE;
			
			break;
			
		case TYPE_TEXT:
		
			style = '_&primitive=53&text='+IMAGE_TEXT+'&color='+INPUT_FCOLOR+'&fsize='+INPUT_FSIZE+'&size='+INPUT_SIZE;
		
			break;
		
		case TYPE_POLYLINE:
		
			style = "_&primitive=20&lwidth="+INPUT_WIDTH+"&lColor="+INPUT_COLOR;
		
			break;
		
		case TYPE_POLYGON:
		
			style = "_&lwidth="+INPUT_WIDTH+"&primitive=40&lColor="+INPUT_COLOR+"&aColor="+INPUT_BG_COLOR+"&bgMode="+INPUT_TRANSPARENT+"&brush="+INPUT_BRUSH;
		
			break;
		
		case TYPE_CIRCLE:
			
			style = "_&lwidth="+INPUT_WIDTH+"&primitive=30&lColor="+INPUT_COLOR +"&aColor="+INPUT_BG_COLOR+"&bgMode="+INPUT_TRANSPARENT+"&brush="+INPUT_BRUSH;
	
			break;
		
		case TYPE_RECT:
			
			style = "_&lwidth="+INPUT_WIDTH+"&primitive=70&lColor="+INPUT_COLOR +"&aColor="+INPUT_BG_COLOR+"&bgMode="+INPUT_TRANSPARENT+"&brush="+INPUT_BRUSH;
		
			break;
	}
	return style;
}

function changeInputMode(mode)
{
	mode_input = mode;
	
	setInputButtonView(1,-1,-1);
}

	function changeModeDisp(mode)
	{
		var msg="";

		if(mode==NONE)					{	msg=""; 			}
		else if(mode==INPUT_POINT)		{	msg="<nobr>□クリック:アイコンの配置場所を指定します";		}
		else if(mode==INPUT_POLYLINE)	{	msg="<nobr>□クリック:頂点を指定します     </nobr><nobr>□ダブルクリック:線を確定します</nobr>";	}
		else if(mode==INPUT_POLYGON)	{	msg="<nobr>□クリック:頂点を指定します     </nobr><nobr>□ダブルクリック:面を確定します</nobr>";	}
		else if(mode==INPUT_CIRCLE)		{	msg="<nobr>□クリック:円の中心を指定します";		}
		else if(mode==INPUT_RECT)		{	msg="<nobr>□クリック:四角の対角の2点を指定します";		}
		else if(mode==INPUT_TEXT)		{	msg="<nobr>□クリック:テキストの配置場所を指定します";	}
		else if(mode==INPUT_POINTS)		{	msg="";	}
		
		return msg;
		
	} 

	//作図系ボタンの表示制御
	//s:入力開始ボタン(=入力図形削除ボタン)　p:一手戻るボタン　c:キャンセルボタン
	function setInputButtonView(s,p,c)
	{
		var snode = document.getElementById('startInputButton');
		var pnode = document.getElementById('cancelPreviousButton');
		var cnode = document.getElementById('cancelInputButton');
		
		
		var nodes = new Array(snode,pnode,cnode);
		
		var  a = setInputButtonView.arguments.length;
		for (var  i = 0;i<a;i++)
		{
			if(nodes[i])
			{
				if(arguments[i] == 1)
				{
					//nodes[i].style.display = "block";
					nodes[i].style.visibility = "visible";
				}
				else if(arguments[i] == -1)
				{
					//nodes[i].style.display = "none";
					nodes[i].style.visibility = "hidden";
				}
			}
		}
	}
	
	

	function cancelInput()
	{
		if(cur_mode == 'search_route')
		{
			var f = confirm('ルート検索を終了してよろしいですか？');
			if(f)
			{
				GetRequestItem('reqRouteStartRemove');
				setInputButtonView(1,-1,-1);
				modeChange(DEF_MODE);
			}
		}
		else if(check_flg_viewLock())
		{
			mode_input=INPUT_POINT;
			setInputButtonView(1,-1,-1);
			modeChange(DEF_MODE);
		}
	}


	
	
	



