//───────────────────────────────────────────
//
//(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;
	RemoveIcons();							//全ての林檎を消す
}
// スライダ操作中
function slide_ing( ctrl, client, pos ){
	var dScl = GetSliderScale( pos, divSlideLen );
	slideScale( dScl );

	var dWid, dHei, strCol, iX, iY;
	var dRate = mapCurScl / dScl;
	dWid = parseFloat( mapWid * dRate );
	dHei = parseFloat( mapHei * dRate );
	strCol = "#FF0000";

	iX = divMapX + parseInt( ( mapWid - dWid ) / 2.0 );
	iY = divMapY + parseInt( ( mapHei - dHei ) / 2.0 );

	if( b2ndMap ){
		moveDivTo( getDivFromName("mainmap2"), iX, iY );
		document.imgmap2.style.width = Math.round( dWid );
		document.imgmap2.style.height = Math.round( dHei );

		var cpX = iX;
		var cpY = iY;
		var clipTop    = divMapY - cpY;
		var clipRight  = parseInt(mapWid) + divMapX - cpX;
		var clipBottom = parseInt(mapHei) + divMapY - cpY;	
		var clipLeft   = divMapX - cpX;
		setDivClip(getDivFromName("mainmap2"), clipTop, clipRight, clipBottom, clipLeft);
	}
	else{
		moveDivTo( getDivFromName("mainmap1"), iX, iY );
		document.imgmap1.style.width = Math.round( dWid );
		document.imgmap1.style.height = Math.round( dHei );

		var cpX = iX;
		var cpY = iY;
		var clipTop    = divMapY - cpY;
		var clipRight  = parseInt(mapWid) + divMapX - cpX;
		var clipBottom = parseInt(mapHei) + divMapY - cpY;	
		var clipLeft   = divMapX - cpX;
		setDivClip(getDivFromName("mainmap1"), clipTop, clipRight, clipBottom, clipLeft);
	}
}
// スライダ操作後
function slide_ed( ctrl, client, pos ){
	if( preSlide == pos ){	//スライダが移動していない場合は処理しません
		iframelist.VisibleIcnDiv();
		return;
	}

	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
	writeScaleMeter(tmp);
}


//オリジナル	250m〜200km間を8分割
arrScl = new Array( 250.0, 500.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0, 100000.0, 200000.0 );

//ケース１	250m〜20km間を対数で
/*
arrScl = new Array();
cutN = 0;
for( cut = Math.log( 250 ) / Math.log( 10 ); cut <= Math.log( 20000 ) / Math.log( 10 ); cut += .02 )
	arrScl[ cutN++ ] = ( Math.pow( 10, parseFloat( cut ) ) );
arrScl[ cutN ] = 20000;
*/

//ケース２	1〜5km間を4分割
//arrScl = new Array( 1000.0, 2000.0, 3000.0, 4000.0, 5000.0 );

//ケース３	1〜5km間　分割なし
//arrScl = new Array( 1000.0, 5000.0 );

//※ケース２、３　は同一になります

// スライダの位置からスケールを取得します
function GetSliderScale( pos, lenbar ){
	var dScl;
	var dLenSpan = lenbar / ( arrScl.length - 1 );

	pos = Math.round( pos );
	dScl = arrScl[2];													//デフォルト
	if( ( lenbar - 1 ) <= pos ){
		dScl = arrScl[0];												//250
	}
	else if( pos <= 0 ){
		dScl = arrScl[ arrScl.length - 1 ];								//200000
	}
	else{
		for( n = 0; n <= ( arrScl.length - 2 ); 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 / ( arrScl.length - 1 );

	dScl = Math.round( dScl );
	pos = 0;													//デフォルト
	if( dScl <= arrScl[0] ){									//〜250
		pos = ( lenbar - 1 );
	}
	else if( arrScl[ arrScl.length - 1 ] <= dScl ){				//200000〜
		pos = 0;
	}
	else{
		for( n = 1; n <= ( arrScl.length - 1 ); 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 = "images/chizumaru/btn_move.gif"
	document.img2.src = "images/chizumaru/btn_zoom.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, mapmagnify, null, mapmagnify_ing, null, mapmagnify_ed, null, null, null );
		setDivStyleAttribute( objMainMap1, "cursor", "crosshair" );
		document.mapform.clk.value	= "2";

		document.img2.src			= "images/chizumaru/btn_zoom_on.gif";
		document.img2.onmouseover	= function(){ return false; };
		document.img2.onmouseout	= function(){ return false; };
		document.img1.onmouseover	= function(){ document.img1.src='images/chizumaru/btn_move_ov.gif'; };
		document.img1.onmouseout	= function(){ document.img1.src='images/chizumaru/btn_move.gif'; };
	}
	else{				//クリック・ドラッグスクロール移動
		ech_attachMouseDrag( objMainMap1, mapdrag, objMainMap1, mapdrag_ing, objMainMap1, mapdrag_ed, objMainMap1, mapclick, objMainMap1 );
		setDivStyleAttribute( objMainMap1, "cursor", "auto" );
		if( 1 == ReloadType ){
			ech_attachMouseDrag( objMainMap2, mapdrag, objMainMap2, mapdrag_ing, objMainMap2, mapdrag_ed, objMainMap2, mapclick, objMainMap2 );
			setDivStyleAttribute( objMainMap2, "cursor", "auto" );
		}
		document.mapform.clk.value	= "1";

		document.img1.src			= "images/chizumaru/btn_move_on.gif";
		document.img1.onmouseover	= function(){ return false; };
		document.img1.onmouseout	= function(){ return false; };
		document.img2.onmouseover	= function(){ document.img2.src='images/chizumaru/btn_zoom_ov.gif'; };
		document.img2.onmouseout	= function(){ document.img2.src='images/chizumaru/btn_zoom.gif'; };
	}
}

// ドラッグ移動前
function mapdrag( ctrl, client ){
	preDrX = ctrl.pageX;
	preDrY = ctrl.pageY;
}
// ドラッグ移動中
function mapdrag_ing( ctrl, client ){
	if(client) setDivStyleAttribute( client, "cursor", "move" );
	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;

	if( clipTop < 0 )	clipTop = 0;
	if( clipLeft < 0 )	clipLeft = 0;
	if( mapWid < clipRight )	clipRight = mapWid;
	if( mapHei < clipBottom )	clipBottom = mapHei;

	setDivClip(objMainMap1, clipTop, clipRight, clipBottom, clipLeft);
}
// ドラッグ移動後
function mapdrag_ed( ctrl, client ){
	if(client) setDivStyleAttribute( client, "cursor", "auto" );
	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 ){
		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){
	if(mapCtrl_timer) return;
	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;


	mapCtrl_duration = 500;
	mapCtrl_moveID = new Date().getTime();
	var _func = function() {moveMiddle(client, divMapX, divMapY, moveX - parseInt(mapWid / 2), moveY - parseInt(mapHei / 2));};
	mapCtrl_timer = setTimeout(_func, 20);
}

function moveMiddleCancel(){
	if(mapCtrl_timer){
		mapCtrl_moveID = null;
		mapCtrl_duration = null;
		clearTimeout(mapCtrl_timer);
		mapCtrl_timer = null;
	}
}

function moveMiddleDraw(div, motoX, motoY, moveX, moveY){
	moveDivTo(div, motoX - moveX, motoY - moveY);

	var cpX = motoX - moveX;
	var cpY = motoY - moveY;
	var clipTop    = motoY - cpY;
	var clipRight  = parseInt(mapWid) + motoX - cpX;
	var clipBottom = parseInt(mapHei) + motoY - cpY;	
	var clipLeft   = motoX - cpX;
	setDivClip(div, clipTop + 1, clipRight, clipBottom, clipLeft + 1);
}

var mapCtrl_timer = null;
var mapCtrl_moveID = null;
var mapCtrl_duration = null;
function moveMiddle(div, motoX, motoY, lengthX, lengthY){
	var time = new Date().getTime();
	if (mapCtrl_moveID + mapCtrl_duration <= time) {

		moveMiddleDraw(div, motoX, motoY, lengthX, lengthY);

		var posX  = new refvar();
		var posY  = new refvar();
		GetPosClick( mapCurX, mapCurY, mapCurScl, mapWid, mapHei, lengthX + parseInt(mapWid / 2), lengthY + parseInt(mapHei / 2), posX, posY );
		document.mapform.x.value = String( posX.value );
		document.mapform.y.value = String( posY.value );
		ToNext();	
		return;
	}
	if(mapCtrl_timer) clearTimeout(mapCtrl_timer);
	mapCtrl_timer = null;

    var pos = (-Math.cos((time - mapCtrl_moveID) / mapCtrl_duration * Math.PI) / 2) + 0.5;
	var moveX = lengthX * pos;
	var moveY = lengthY * pos;

	moveMiddleDraw(div, motoX, motoY, moveX, moveY);

	var _func = function() {moveMiddle(div, motoX, motoY, lengthX, lengthY);};
	mapCtrl_timer = setTimeout(_func, 20);
}

//───────────────────────────────────────────

//───────────────────────────────────────────
//	８方向スクロール
//───────────────────────────────────────────
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 ){
		MapOnLoad();
	}
	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追加に伴う変更
//	ver 2.10
//		スケールサンプル追加
//	ver 3.00
//		クリック移動とドラッグ移動モードを統合
//		クリック移動、スライダ拡大・縮小処理の変更
//	ver 3.20
//		範囲拡大時にクリックした場合、アイコンが非表示化されてしまう不具合を修正
//
//───────────────────────────────────────────
