//───────────────────────────────────────────
//
//(C) Nihon Computer Graphic Co.,Ltd.
//
//───────────────────────────────────────────

//内容
//	地図の操作（ドラッグ・クリック・スライダ等）


var bRubber		= true;					//ラバーDIV			表示、非表示
var bRubberMsg	= true;					//ラバーメッセージDIV	表示、非表示

var preDrX, preDrY;						//ドラッグ移動前座標
var divRubber		= null;				//ラバーDIV
var divRubbermsgin	= null;				//ラバーメッセージDIV
var divRubbermsgout	= null;				//ラバーメッセージDIV
var preSlide;							//スライダ移動前位置

//───────────────────────────────────────────
//	スライダ
//───────────────────────────────────────────
// スライダの登録
function regSlider( lenbar, firstpoint, lab ){
	var objSlider = getDivFromName( "slider" );
	Slider( objSlider, lab, lenbar, 0, ( lenbar - 1 ), firstpoint, slide, null, slide_ing, null, slide_ed, null );
}
// スライダ操作前
function slide( ctrl, client, pos ){
	preSlide = pos;
	//ラバーレイヤ作成
	divRubber = createLayer( 0, 0, 0, 0 );
	setDivStyleAttribute( divRubber, "font", "0 0px Arial" );
	setDivStyleAttribute( divRubber, "border", "1px solid #FF00FF" );
	setDivZIndex( divRubber, 840 );
	moveDivTo( divRubber, divMapX, divMapY );
	resizeDivTo( divRubber, mapWid, mapHei );
	if( !bRubber ){
		setDivVisibility( divRubber, false );
	}
	else{
		setDivVisibility( divRubber, true );
	}
	//メッセージレイヤ作成
	var strHtml;
	strHtml = "<table cellpadding='1' cellspacing='0' bgcolor='#ffffff' style='filter:alpha(opacity=85);' border='1' bordercolor='#CFCFCF'><tr><td><table cellpadding='0' cellspacing='0'  border='0'><tr><td class='nom' nowrap>今の表示エリアが青線の範囲になるように拡大します</td></tr></table></td></tr></table>";
	divRubbermsgin  = createLayer( 0, 0, 0, 0, null, strHtml );
	setDivZIndex( divRubbermsgin, 850 );
	strHtml = "<table cellpadding='1' cellspacing='0' bgcolor='#ffffff' style='filter:alpha(opacity=85);' border='1' bordercolor='#CFCFCF'><tr><td><table cellpadding='0' cellspacing='0'  border='0'><tr><td class='nom' nowrap>今の表示エリアが赤線の範囲になるように縮小します</td></tr></table></td></tr></table>";
	divRubbermsgout = createLayer( 0, 0, 0, 0, null, strHtml );
	setDivZIndex( divRubbermsgout, 850 );
}
// スライダ操作中
function slide_ing( ctrl, client, pos ){
	var dScl = GetSliderScale( pos, divSlideLen );
	slideScale( dScl );
	//
	var dWid, dHei, strCol, iX, iY;
	var dRate = mapCurScl / dScl;
	if( mapCurScl < dScl ){
		dWid = parseFloat( mapWid * dRate );
		dHei = parseFloat( mapHei * dRate );
		strCol = "#FF0000";
	}
	else{
		dWid = parseFloat( mapWid / dRate );
		dHei = parseFloat( mapHei / dRate );
		strCol = "#0000FF";
	}
	iX = divMapX + parseInt( ( mapWid - dWid ) / 2.0 );
	iY = divMapY + parseInt( ( mapHei - dHei ) / 2.0 );
	setDivStyleAttribute( divRubber, "border", "2px solid " + strCol );
	moveDivTo( divRubber, iX, iY );
	resizeDivTo( divRubber, Math.round( dWid ), Math.round( dHei ) );

	var dspmsgX, dspmsgY
	dspmsgX = iX;
	if( dHei < 30 )
		dspmsgY = iY + dHei;
	else
		dspmsgY = iY;
	//
	if( mapCurScl < dScl ){
		setDivVisibility( divRubbermsgin, false );
		moveDivTo( divRubbermsgout, dspmsgX, dspmsgY );
		setDivVisibility( divRubbermsgout, true );
	}
	else{
		setDivVisibility( divRubbermsgout, false );
		moveDivTo( divRubbermsgin, dspmsgX, dspmsgY );
		setDivVisibility( divRubbermsgin, true );
	}
	if( !bRubberMsg || !bRubber ){
		setDivVisibility( divRubbermsgin, false );
		setDivVisibility( divRubbermsgout, false );
		if( !bRubber ){
			setDivVisibility( divRubber, false );
		}
	}
}
// スライダ操作後
function slide_ed( ctrl, client, pos ){
	setDivVisibility( divRubber, false );
	setDivVisibility( divRubbermsgin, false );
	setDivVisibility( divRubbermsgout, false );

	if( preSlide == pos ){	//スライダが移動していない場合は処理しません
		return;
	}
	RemoveIcons();							//全ての林檎を消す

	var dScl = GetSliderScale( pos, divSlideLen );
	
	var scLeft = document.body.scrollLeft;
	var scTop  = document.body.scrollTop;
	if( null == scLeft ) scLeft = 0;
	if( null == scTop )  scTop  = 0;
	
	document.mapform.scl.value = String( Math.round( dScl ) );
	ToNext();
}
// スライダのスケール表示
function slideScale( scl ){
	if( 1000.0 > scl ){
		tmp = String( parseInt( scl ) ).substr( 0, 2 ) + "0m";
	}
	else if( 10000.0 > scl ){
		var tmp = String( scl / 1000 );
		if( 1 == tmp.length ) tmp = tmp + ".0";
		tmp = tmp.substring( 0, 3 ) + "km";
	}
	else if( 20000.0 > scl ){
		tmp = String( parseInt( scl / 1000.0 ) ) + "km";
	}
	else if( 100000.0 > scl ){
		tmp = String( parseInt( scl / 1000.0 ) ).substr( 0, 1 ) + "0km";
	}
	else{
		tmp = String( parseInt( scl / 1000.0 ) ).substr( 0, 2 ) + "0km";
	}
	document.sclform.scl.value = tmp
}


arrScl = new Array( 250.0, 500.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0, 100000.0, 200000.0 );

// スライダの位置からスケールを取得します
function GetSliderScale( pos, lenbar ){
	var dScl;
	var dLenSpan = lenbar / 8.0;

	pos = Math.round( pos );
	dScl = arrScl[2];													//デフォルト
	if( ( lenbar - 1 ) <= pos ){
		dScl = arrScl[0];												//250
	}
	else if( pos <= 0 ){
		dScl = arrScl[8];												//200000
	}
	else{
		for( n = 0; n <= 7; n++ ){
			if( ( ( lenbar - 1 ) - ( dLenSpan * ( n + 1 ) ) ) < pos ){	//250〜200000
				dScl = arrScl[n] + ( ( ( lenbar - 1 ) - ( dLenSpan * n ) ) - pos ) * ( ( arrScl[( n + 1 )] - arrScl[n] ) / dLenSpan );
				break;
			}
		}
	}
	dScl = Math.round( dScl );
	return dScl;
}
// スケールからスライダの位置を取得します
function GetSliderPosition( dScl, lenbar ){
	var pos;
	var dLenSpan = lenbar / 8.0;

	dScl = Math.round( dScl );
	pos = 0;													//デフォルト
	if( dScl <= arrScl[0] ){									//〜250
		pos = ( lenbar - 1 );
	}
	else if( arrScl[8] <= dScl ){								//200000〜
		pos = 0;
	}
	else{
		for( n = 1; n <= 8; n++ ){
			if( dScl < arrScl[n] ){								//250〜200000
				pos = ( ( lenbar - 1 ) - dLenSpan * ( n - 1 ) ) - dLenSpan * ( dScl - arrScl[( n - 1 )] ) / ( arrScl[n] - arrScl[( n - 1 )] );
				break;
			}
		}
	}

	pos = Math.round( pos );
	return pos;
}
//───────────────────────────────────────────


//───────────────────────────────────────────
//	マウスドラッグ・クリック
//───────────────────────────────────────────
// 地図操作画像リセット
function resetimg(){
	document.img1.src = "img/x.gif"
	document.img2.src = "img/x.gif"
	document.img3.src = "img/x.gif"
}
// 地図操作指定
function regDrag( paraClk ){
	var objMainMap1, objMainMap2;
	if( 0 == ReloadType ){
		objMainMap1 = getDivFromName( "mainmap1" );
	}
	else if( b2ndMap && 1 == ReloadType ){
		objMainMap1 = getDivFromName( "mainmap2" );
		objMainMap2 = getDivFromName( "mainmap1" );
	}
	else{
		objMainMap1 = getDivFromName( "mainmap1" );
		objMainMap2 = getDivFromName( "mainmap2" );
	}
	resetimg();
	if( "2" == paraClk ){						//ドラッグスクロール
		ech_attachMouseDrag( objMainMap1, mapdrag, null, mapdrag_ing, null, mapdrag_ed, null, null, null );
		setDivStyleAttribute( objMainMap1, "cursor", "move" );
		if( 1 == ReloadType ){
			ech_attachMouseDrag( objMainMap2, mapdrag, null, mapdrag_ing, null, mapdrag_ed, null, null, null );
			setDivStyleAttribute( objMainMap2, "cursor", "move" );
		}

		document.mapform.clk.value	= "2";

		document.img2.src			= "img/2.gif";
	}
	else if( "3" == paraClk ){				//範囲拡大
		ech_attachMouseDrag( objMainMap1, mapmagnify, null, mapmagnify_ing, null, mapmagnify_ed, null, null, null );
		setDivStyleAttribute( objMainMap1, "cursor", "crosshair" );
		document.mapform.clk.value	= "3";

		document.img3.src			= "img/3.gif";
	}
	else{									//クリック移動
		ech_attachMouseDrag( objMainMap1, null, null, null, null, null, null, mapclick, null );
		setDivStyleAttribute( objMainMap1, "cursor", "auto" );
		document.mapform.clk.value	= "1";

		document.img1.src			= "img/1.gif";
	}
}

// ドラッグ移動前
function mapdrag( ctrl, client ){
	preDrX = ctrl.pageX;
	preDrY = ctrl.pageY;
}
// ドラッグ移動中
function mapdrag_ing( ctrl, client ){
	RemoveIcons();							//全ての林檎を消す

	var objMainMap1, objMainMap2;
	if( 0 == ReloadType ){
		objMainMap1 = getDivFromName( "mainmap1" );
	}
	else if( b2ndMap && 1 == ReloadType ){
		objMainMap1 = getDivFromName( "mainmap2" );
		objMainMap2 = getDivFromName( "mainmap1" );
	}
	else{
		objMainMap1 = getDivFromName( "mainmap1" );
		objMainMap2 = getDivFromName( "mainmap2" );
	}

	var cpX = ctrl.pageX;
	var cpY = ctrl.pageY;
	if(divMapX > cpX)
		cpX = divMapX;
	else if( divMapX + mapWid < cpX )
		cpX = divMapX + mapWid;
	if( divMapY > cpY )
		cpY = divMapY;
	else if( divMapY + mapHei < cpY )
		cpY = divMapY + mapHei;
	var ccX = ctrl.curX;
	var ccY = ctrl.curY;
	if( divMapX > ccX )
		ccX = divMapX;
	else if( divMapX + mapWid < ccX )
		ccX = divMapX + mapWid;
	if( divMapY > ccY )
		ccY = divMapY;
	else if( divMapY + mapHei < ccY )
		ccY = divMapY + mapHei;
	moveDivBy( objMainMap1, cpX - ccX, cpY - ccY );

	var clipTop    = preDrY - cpY;
	var clipRight  = mapWid + preDrX - cpX;
	var clipBottom = mapHei + preDrY - cpY;
	var clipLeft   = preDrX - cpX;
	setDivClip(objMainMap1, clipTop, clipRight, clipBottom, clipLeft);
}
// ドラッグ移動後
function mapdrag_ed( ctrl, client ){
	var cpX = ctrl.pageX;
	var cpY = ctrl.pageY;
	if( divMapX > cpX )
		cpX = divMapX;
	else if( divMapX + mapWid < cpX )
		cpX = divMapX + mapWid;
	if( divMapY > cpY )
		cpY = divMapY;
	else if( divMapY + mapHei < cpY )
		cpY = divMapY + mapHei;

	var ofsX  = preDrX - cpX;
	var ofsY  = preDrY - cpY;
	var moveX = parseInt( ( mapWid / 2.0 ) + ofsX );
	var moveY = parseInt( ( mapHei / 2.0 ) + ofsY );
	var posX  = new refvar();
	var posY  = new refvar();

	//クリックのみ
	if( 0 == ofsX && 0 == ofsY )
		return;

	GetPosOffset( mapCurX, mapCurY, mapCurScl, mapWid, mapHei, moveX, moveY, posX, posY );

	var scLeft = document.body.scrollLeft;
	var scTop  = document.body.scrollTop;
	if( null == scLeft ) scLeft = 0;
	if( null == scTop )  scTop  = 0;

	document.mapform.x.value = String( posX.value );
	document.mapform.y.value = String( posY.value );
	if( 1 == ReloadType ){
		b2ndMap = !b2ndMap;
	}
	ToNext();
}

// 範囲拡大前
function mapmagnify( ctrl, client ){
	preDrX = ctrl.pageX;
	preDrY = ctrl.pageY;
	//ラバーレイヤ作成
	divRubber = createLayer( 0, 0, 0, 0 );
	setDivStyleAttribute( divRubber, "font", "0 0px Arial" );
	setDivStyleAttribute( divRubber, "border", "2px solid #0000FF" );
	setDivZIndex( divRubber, 840 );
}
// 範囲拡大中
function mapmagnify_ing( ctrl, client ){
	var cpX = ctrl.pageX;
	var cpY = ctrl.pageY;
	if( divMapX > cpX )
		cpX = divMapX;
	else if( divMapX+mapWid < cpX )
		cpX = divMapX + mapWid;
	if( divMapY > cpY )
		cpY = divMapY;
	else if( divMapY+mapHei < cpY )
		cpY = divMapY + mapHei;
	
	var mx, my;
	var mwid, whei;
	if( 0 < preDrX - cpX ){
		mx = cpX;
		mwid = preDrX - cpX;
	}
	else{
		mx = preDrX;
		mwid = cpX - preDrX;
	}
	if( 0 < preDrY - cpY ){
		my = cpY;
		mhei = preDrY - cpY;
	}
	else{
		my = preDrY;
		mhei = cpY - preDrY;
	}
	moveDivTo( divRubber, mx, my );
	resizeDivTo( divRubber, mwid, mhei );
	setDivVisibility( divRubber, true );
}
// 範囲拡大後
function mapmagnify_ed( ctrl, client ){
	RemoveIcons();							//全ての林檎を消す
	setDivVisibility( divRubber, false );

	var cpX = ctrl.pageX;
	var cpY = ctrl.pageY;
	if( divMapX > cpX )
		cpX = divMapX;
	else if( divMapX+mapWid < cpX )
		cpX = divMapX + mapWid;
	if( divMapY > cpY )
		cpY = divMapY;
	else if( divMapY+mapHei < cpY )
		cpY = divMapY + mapHei;

	var yokoH = Math.abs( preDrX - cpX ) / mapWid;
	var tateH = Math.abs( preDrY - cpY ) / mapHei;
	var yoko0 = preDrX - cpX;
	var tate0 = preDrY - cpY;
	var dScl;

	//クリックのみ
	if( 0 == yokoH && 0 == tateH )
		return;

	if( tateH > yokoH )
		dScl = ( Math.abs( tate0 ) / mapHei ) * mapCurScl;
	else
		dScl = ( Math.abs( yoko0 ) / mapWid ) * mapCurScl;

	if( Math.round( dScl ) > 0 ){
		var moveX = parseInt( ( ( preDrX - divMapX ) + ( cpX - divMapX ) ) / 2.0 );
		var moveY = parseInt( ( ( preDrY - divMapY ) + ( cpY - divMapY ) ) / 2.0 );
		var posX  = new refvar();
		var posY  = new refvar();
		GetPosClick( mapCurX, mapCurY, mapCurScl, mapWid, mapHei, moveX, moveY, posX, posY );
		if( 250.0 > dScl )
			dScl = 250.0;

		var scLeft = document.body.scrollLeft;
		var scTop  = document.body.scrollTop;
		if( null == scLeft ) scLeft = 0;
		if( null == scTop )  scTop  = 0;

		document.mapform.x.value	= String( posX.value );
		document.mapform.y.value	= String( posY.value );
		document.mapform.scl.value	= String( Math.round( dScl ) );
		ToNext();
	}
}

// クリック移動
function mapclick(ctrl,client){
	RemoveIcons();							//全ての林檎を消す
	var moveX = parseInt( ctrl.pageX - divMapX );
	var moveY = parseInt( ctrl.pageY - divMapY );
	var posX  = new refvar();
	var posY  = new refvar();

	GetPosClick( mapCurX, mapCurY, mapCurScl, mapWid, mapHei, moveX, moveY, posX, posY );

	var scLeft = document.body.scrollLeft;
	var scTop  = document.body.scrollTop;
	if( null == scLeft ) scLeft = 0;
	if( null == scTop )  scTop  = 0;
	
	document.mapform.x.value = String( posX.value );
	document.mapform.y.value = String( posY.value );
	ToNext();	
}
//───────────────────────────────────────────

//───────────────────────────────────────────
//	８方向スクロール
//───────────────────────────────────────────
function scroll8( dir ){
	RemoveIcons();							//全ての林檎を消す
	var minX = new refvar();
	var minY = new refvar();
	var maxX = new refvar();
	var maxY = new refvar();
	var moveX, moveY;
	var newX, newY;

	GetRectClient( mapCurX, mapCurY, mapCurScl, mapWid, mapHei, minX, minY, maxX, maxY );
	moveX = parseFloat( ( maxX.value - minX.value ) * 0.5 );		//移動量：画面の1/2
	moveY = parseFloat( ( maxY.value - minY.value ) * 0.5 );		//移動量：画面の1/2

	if( "1" == dir ){			//北西
		newX = String( mapCurX - moveX );
		newY = String( mapCurY + moveY );
	}
	else if( "2" == dir ){	//北
		newX = String( mapCurX );
		newY = String( mapCurY + moveY );
	}
	else if( "3" == dir ){	//北東
		newX = String( mapCurX + moveX );
		newY = String( mapCurY + moveY );
	}	
	else if( "4" == dir ){	//西
		newX = String( mapCurX - moveX );
		newY = String( mapCurY );
	}
	else if( "5" == dir ){	//東
		newX = String( mapCurX + moveX );
		newY = String( mapCurY );
	}
	else if( "6" == dir ){	//南西
		newX = String( mapCurX - moveX );
		newY = String( mapCurY - moveY );
	}
	else if( "7" == dir ){	//南
		newX = String( mapCurX );
		newY = String( mapCurY - moveY );
	}
	else if( "8" == dir ){	//南東
		newX = String( mapCurX + moveX );
		newY = String( mapCurY - moveY );
	}

	var scLeft = document.body.scrollLeft;
	var scTop  = document.body.scrollTop;
	if( null == scLeft ) scLeft = 0;
	if( null == scTop )  scTop  = 0;
	
	document.mapform.x.value = newX;
	document.mapform.y.value = newY;
	ToNext();
}
//───────────────────────────────────────────


//───────────────────────────────────────────
//	スケール変更
//───────────────────────────────────────────
function ChScale( scl ){
	RemoveIcons();							//全ての林檎を消す
	if( scl < 250 )
		scl = 250;
	if( 200000 < scl )
		scl = 200000;

	document.mapform.scl.value = scl;
	ToNext();
}

//───────────────────────────────────────────
//	パラメタ取得
//───────────────────────────────────────────
//地図画像パラメタ
function GetMapParam(){
	return GetParam_base( "clk" );
}
//ページパラメタ
function GetPageParam(){
	return GetParam_base( "" );
}
//パラメタ取得
//引数１　取得しないパラメタ 「,」コンマつなぎで複数可
function GetParam_base( exception ){
	arrExp = exception.split( "," )

	AllParam = "";
	for( n = 0; n <= document.mapform.elements.length - 1; n++ ){
		bAdd = true;
		for( e = 0; e <= arrExp.length - 1; e++ ){
			if( document.mapform.elements[n].name.toLowerCase() == arrExp[e].toLowerCase() ){
				bAdd = false;
				break;
			}
		}
		if( bAdd ){
			AllParam += "&" + document.mapform.elements[n].name + "=" + document.mapform.elements[n].value;
		}
	}
	AllParam = AllParam.substr( 1 );
	return AllParam;
}

//───────────────────────────────────────────
//	次ページへの動作
//───────────────────────────────────────────
function ToNext(){
	if( 1 == ReloadType ){
		AllInit();
	}
	else{
		document.mapform.submit();
	}
}

function deb( str ){
	status = "width=" + screen.width + ",height=30,left=0,top=0,location=no,munubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no";
	pop = window.open( "", "abc", status );
	pop.document.open();
	pop.document.write( "<body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0><font face='ＭＳ ゴシック'>" );
	pop.document.write( str	 );
	pop.document.close();
}
//───────────────────────────────────────────
//
//	ver 1.00
//	ver 2.00
//		dsp_C2.asp追加に伴う変更
//
//───────────────────────────────────────────
