
// ----------------------------------------
// JGetElementById
// ----------------------------------------
function JGetElementById( thisDocument, id )
{
	return xGetElementById( id, thisDocument );
}

function JMapCreateDiv()
{
	return xCreateDiv();
}

//==================================================
//
// JMap2GetMakerHtml
//
//==================================================
function getJMarkerHtmlFromOpts( gFrame, obj_jmarkerOpts )
{
	if( obj_jmarkerOpts.boolTypeMarker('info') ){
		return obj_jmarkerOpts.getObjMarkerHtml().createHtml()

	}else if( obj_jmarkerOpts.boolTypeMarker('icon') ){
		var url	 = gFrame.data_icon['url'];
		var data = gFrame.data_icon[ obj_jmarkerOpts.getTypeJIcon() ];
		return "<img src='" + url + data['img'] + "' width=" + data['iconSize'].width + " height=" + data['iconSize'].height + " border=0>";
	}
}

function getJMarkerHtmlFromObj( obj_jmarker )
{
	return getJMarkerHtmlFromOpts( obj_jmarker.gFrame, obj_jmarker.obj_opts );
}

//==================================================
//
// MoveLog Object
//
//==================================================
function MoveLog( point, zoomLevel )
{
	this.point		= point;
	this.zoomLevel	= zoomLevel;
}

//==================================================
//
// JMap2GMap Container
//
//==================================================
function JMap2GMap( obj_jmap2, gmap_frame_id, gmap_obj_id, gmapFrameName, width, height )
{
	this.obj_jmap2		= obj_jmap2;
	this.gmap_frame_id	= gmap_frame_id;
	this.gFrame			= obj_jmap2.getGMapFrame( gmap_frame_id );

	this.gmap_obj_id	= gmap_obj_id;
	this.gmapDiv		= this.createGMapDiv( gmap_obj_id, width, height );
	this.gmapDivSize	= new this.gFrame.GSize( width, height );
	this.gmapFrameName	= gmapFrameName;
	this.obj_gmap		= new this.gFrame.GMap2( this.gmapDiv );

	this.rePosGMapFrame();

	// moveLog
	this.list_moveLog	= new Array();
	this.cancel_addMoveLog = false;
	this.moveLog_backNo	= 0;
	this.bool_logZooming= false;
	this.currentMapType = null;

	this.divButton = new Array();
	this.divButton['back']		= JGetElementById( document, gmap_frame_id + "_" + gmap_obj_id + "_backLog" );
	this.divButton['forward']	= JGetElementById( document, gmap_frame_id + "_" + gmap_obj_id + "_forwardLog" );

	this.divMapType = new Array();
	this.divMapType['normal']	= JGetElementById( document, gmap_frame_id + "_" + gmap_obj_id + "_maptype_normal" );
	this.divMapType['satellite']= JGetElementById( document, gmap_frame_id + "_" + gmap_obj_id + "_maptype_satellite" );
	this.divMapType['hybrid']	= JGetElementById( document, gmap_frame_id + "_" + gmap_obj_id + "_maptype_hybrid" );

	this.bool_cancelClick = false;
}

// 全共通イベント
JMap2GMap.prototype.initEvent = function()
{
	this.gFrame.GEvent.bind(this.obj_gmap, 'mousemove',		this, this.callMouseMove );
	this.gFrame.GEvent.bind(this.obj_gmap, 'zoomend',		this, this.callZoomEnd );
	this.gFrame.GEvent.bind(this.obj_gmap, 'move',			this, this.callMove );
	this.gFrame.GEvent.bind(this.obj_gmap, 'moveend',		this, this.callMoveEnd );
	this.gFrame.GEvent.addListener(this.obj_gmap, 'click',	this.gFrame.GEvent.callback(this, this.callOnClick) );
}

// call
JMap2GMap.prototype.callZoomEnd = function()
{
	if( this.obj_zoomControl ){
		this.obj_zoomControl.setCurrentZoomColor();
	}
}

JMap2GMap.prototype.callMouseMove = function()
{
	this.obj_jmap2.focusKeyEvent();
}

JMap2GMap.prototype.callOnClick = function( marker, point)
{
	if( this.obj_jmap2.getPicker() && this.obj_jmap2.getPicker().bool_dragging && this.obj_jmap2.getPicker().bool_enable ){
		return;
	}

	// remove Arrow
	this.gFrame.removeArrowAll();

	// remove Hover
	this.obj_jmap2.hideHoverAll( this.gmap_frame_id, this.gmap_obj_id );

	if( this.obj_gmap.ext_cancel_closeInfoWindow ){
		this.obj_gmap.ext_cancel_closeInfoWindow = false;
	}else{
		this.gFrame.obj_infowin.removeAll();
	}

	if( this.obj_jmap2.bool_onShiftKey && !this.bool_cancelClick ){
		if( this.obj_zoomControl ){
			if( !marker ){
				var zoomLevel = this.obj_gmap.getZoom() + 2;
				if( zoomLevel > this.obj_zoomControl.zoom_max ){
					zoomLevel = this.obj_zoomControl.zoom_max;
				}
				this.obj_gmap.Ext_setCenter(point, zoomLevel );
			}
		}
	}
}
// ----------------------------------------------------------------
// MoveLog
JMap2GMap.prototype.callMove = function()
{
	this.bool_moving = true;
	if( this.cancel_cancelMoveLog ){
		this.cancel_addMoveLog	 = true;
		this.bool_logZooming	 = true;
	}
}

JMap2GMap.prototype.callMoveEnd = function()
{
	this.bool_moving			= false;
	this.cancel_cancelMoveLog	= false
	this.bool_cancelClick		= false;

	if( this.currentMapType != this.obj_gmap.getCurrentMapType() ){
		this.currentMapType = this.obj_gmap.getCurrentMapType();
		return;
	}

	if( this.cancel_addMoveLog == false ){

		// 同じ座標はログをとらない
		var flg_logging = true;
		var chk_length  = this.list_moveLog.length - this.moveLog_backNo;
		if( chk_length > 0 ){
			var lastLog = this.list_moveLog[ chk_length - 1];
			if( 	lastLog.zoomLevel == this.obj_gmap.getZoom()
				&&	lastLog.point.equals( this.obj_gmap.getCenter() )
			){
				flg_logging = false;
			}
		}

		if( flg_logging ){
			this.list_moveLog.length = this.list_moveLog.length - this.moveLog_backNo;
			this.moveLog_backNo	= 0;
			this.list_moveLog.push( new MoveLog(this.obj_gmap.getCenter(), this.obj_gmap.getZoom()) );
		}

	}else{
		this.cancel_addMoveLog = false;
	}

	this.bool_logZooming = false;

	// Check color
	this.checkColorMoveLog();
}

// Back Log
JMap2GMap.prototype.backMoveLogPoint = function()
{
	if( !this.obj_jmap2.getBoolLoadMain() ){return;}
	if( this.bool_logZooming ){ return; }

	var length = this.list_moveLog.length;

	if( 	length > 0
		&&	length > (this.moveLog_backNo + 1)
	){
		this.moveLog_backNo++;
		this.moveToMoveLog( this.list_moveLog[ length - (this.moveLog_backNo+1) ] );
	}
}

// Forward Log
JMap2GMap.prototype.forwardMoveLogPoint = function()
{
	if( !this.obj_jmap2.getBoolLoadMain() ){return;}
	if( this.bool_logZooming ){ return; }

	var length = this.list_moveLog.length;

	if( 	length > 0
		&&	this.moveLog_backNo > 0
	){
		this.moveLog_backNo--;
		this.moveToMoveLog( this.list_moveLog[ length - (this.moveLog_backNo+1) ] );
	}
}

// Move Log
JMap2GMap.prototype.moveToMoveLog = function( obj_moveLog )
{
	this.cancel_addMoveLog	 = true;
	this.bool_logZooming	 = true;

	if( obj_moveLog.zoomLevel == this.obj_gmap.getZoom() ){

		this.cancel_cancelMoveLog = true;
		this.obj_gmap.Ext_panTo( obj_moveLog.point );

	}else{
		this.obj_gmap.Ext_setCenter( obj_moveLog.point, obj_moveLog.zoomLevel );
	}

	// Check color
	this.checkColorMoveLog();
}

// Check color Button
JMap2GMap.prototype.checkColorMoveLog = function()
{
	if( 	this.list_moveLog.length > 0
		&&	this.list_moveLog.length > (this.moveLog_backNo + 1)
	){
		this.changeColorMoveLogButton('back', true );
	}else{
		this.changeColorMoveLogButton('back', false );
	}

	if( 	this.list_moveLog.length > 0
		&&	this.moveLog_backNo > 0
	){
		this.changeColorMoveLogButton('forward', true );
	}else{
		this.changeColorMoveLogButton('forward', false );
	}
}

JMap2GMap.prototype.changeColorMoveLogButton = function( type, bool )
{
	if( this.divButton[type] ){
		this.divButton[type].style.backgroundColor = bool ? '#ffffd0' : '#f0f0f0';
	}
}

// clear MoveLog
JMap2GMap.prototype.clearMoveLog = function()
{
	this.moveLog_backNo	= 0;
	this.list_moveLog	= new Array();
	this.list_moveLog.push( new MoveLog(this.obj_gmap.getCenter(), this.obj_gmap.getZoom()) );

	this.currentMapType = this.obj_gmap.getCurrentMapType();

	this.changeColorMoveLogButton('back',	  false );
	this.changeColorMoveLogButton('forward', false );

	this.changeColorMapType('normal',	 true );
	this.changeColorMapType('satellite', false );
	this.changeColorMapType('hybrid',	 false );
}

// ----------------------------------
// map Type
JMap2GMap.prototype.setMapType = function(type)
{
	var gmap_type = this.gFrame.G_NORMAL_MAP;
	if( type == 'normal' ){
		gmap_type = this.gFrame.G_NORMAL_MAP;
	}else if( type == 'satellite' ){
		gmap_type = this.gFrame.G_SATELLITE_MAP;
	}else{
		gmap_type = this.gFrame.G_HYBRID_MAP;
	}

	if( gmap_type == this.obj_gmap.getCurrentMapType() ){
		return;
	}

	this.changeColorMapType('normal',	 false );
	this.changeColorMapType('satellite', false );
	this.changeColorMapType('hybrid',	 false );

	this.changeColorMapType(type, true );

	this.obj_gmap.setMapType( gmap_type );
}

JMap2GMap.prototype.changeColorMapType = function( type, bool )
{
	if( this.divMapType[type] ){
		this.divMapType[type].style.backgroundColor = bool ? '#ffffd0' : '#f0f0f0';
	}
}

// ----------------------------------
// zoomControl 初期化
JMap2GMap.prototype.setZoomControl = function()
{
	this.obj_zoomControl  = new this.gFrame.JMapZoomControl(this.obj_gmap);
	return this.obj_zoomControl;
}
JMap2GMap.prototype.getZoomControl = function()
{
	return this.obj_zoomControl;
}

// ----------------------------------
// rePosGFampFrame
JMap2GMap.prototype.rePosGMapFrame = function()
{
	this.gmapFramePos = new Position( xPageX(this.gmapFrameName), xPageY(this.gmapFrameName) );
}

// ----------------------------------
// GMap Div
JMap2GMap.prototype.createGMapDiv = function( gmap_obj_id, width, height )
{
	var gFrame	= this.gFrame;

	var gmapDiv = JGetElementById( gFrame.document, gmap_obj_id );

	setDivSizeWH( gmapDiv, width, height );

	return gmapDiv;
}
JMap2GMap.prototype.getGMapFrame = function()
{
	return this.gFrame;
}
JMap2GMap.prototype.getGMapObj = function()
{
	return this.obj_gmap;
}

//==================================================
//
// JMap2 
//
//==================================================
function JMap2()
{
	this.bool_load_main		= false;
	this.bool_load_doc		= new Array();
	this.bool_load_gFrame	= new Array();
	this.list_gmap_frames	= new Array();
	this.list_jmap2gmap		= new Array();
	this.list_onload_func	= new Array();

	this.list_jmarker		= new Array();
	this.list_jline			= new Array();
	this.list_jbound		= new Array();

	this.bool_onShiftKey	= false;
	this.bool_onShiftKeyUp	= true;
	this.bool_onCtrlKey		= false;
	this.bool_onAltKey		= false;

	this.addKeyEvent();
}

// ----------------------------------------------
// backMoveLogPoint
JMap2.prototype.backMoveLogPoint = function( gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	this.getJMap2GMap( gmap_frame_id, gmap_obj_id ).backMoveLogPoint();
}
JMap2.prototype.forwardMoveLogPoint = function( gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	this.getJMap2GMap( gmap_frame_id, gmap_obj_id ).forwardMoveLogPoint();
}
JMap2.prototype.clearMoveLog = function( gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	this.getJMap2GMap( gmap_frame_id, gmap_obj_id ).clearMoveLog();
}
JMap2.prototype.setMapType = function( gmap_frame_id, gmap_obj_id, type )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	this.getJMap2GMap( gmap_frame_id, gmap_obj_id ).setMapType( type );
}

// ----------------------------------------------
// ShiftKey
JMap2.prototype.addKeyEvent = function()
{
	JMap2AttachEvent( document, 'keydown',	JMap2EventHandler( this, 'onKeyDown') );
	JMap2AttachEvent( document, 'keyup',	JMap2EventHandler( this, 'onKeyUp') );
}
JMap2.prototype.addKeyEventFocus = function( gFrame, obj_gmap )
{
	gFrame.GEvent.bind(obj_gmap, 'zoomend',			this, this.focusKeyEvent );
	gFrame.GEvent.bind(obj_gmap, 'maptypechanged',	this, this.focusKeyEvent );
}
JMap2.prototype.focusKeyEvent = function()
{
	window.focus();
	return;
}
JMap2.prototype.onKeyDown = function( thisEvent )
{
	var xEventObj = new xEvent(thisEvent);
	if( xEventObj.shiftKey ){
		this.bool_onShiftKey = true;

		if( this.getPicker() && !this.getPicker().bool_dragging ){
			this.getPicker().startPicker( thisEvent, this.picker_gmap_frame_id, this.picker_gmap_obj_id );
		}

		this.bool_onShiftKeyUp = false;
	}

	if( xEventObj.ctrlKey ){
		this.bool_onCtrlKey = true;
	}

	if( xEventObj.altKey ){
		this.bool_onAltKey = true;
	}
}
JMap2.prototype.onKeyUp = function( thisEvent )
{
	var xEventObj = new xEvent(thisEvent);
	this.bool_onShiftKey	= false;
	this.bool_onCtrlKey		= false;

	if( this.getPicker() && this.getPicker().bool_dragging ){
		this.getPicker().stopPicker();
		this.getPicker().delEvent();
	}

	if( !xEventObj.shiftKey ){
		this.bool_onShiftKeyUp = true;
	}
}

// ----------------------------------------------
JMap2.prototype.getGMapObjId_default = function( gmap_obj_id )
{
	if( gmap_obj_id == null ){ gmap_obj_id = 'default_id' }
	return gmap_obj_id;
}

JMap2.prototype.getGMapFrameId_default = function( gmap_frame_id )
{
	if( gmap_frame_id == null ){ gmap_frame_id = 'default_id' }
	return gmap_frame_id;
}

// ----------------------------------------------
// Bool Load Main 
// ----------------------------------------------
JMap2.prototype.setBoolLoadMain = function( bool )
{
	this.bool_load_main = bool;
}
JMap2.prototype.getBoolLoadMain = function ()
{
	return this.bool_load_main;
}

// Bool Load GFrame
JMap2.prototype.setBoolLoadGFrame = function( key )
{
	this.bool_load_gFrame[key] = true;
}
JMap2.prototype.getBoolLoadGFrame = function( key )
{
	if( this.bool_load_gFrame[key] ){
		return true;
	}else{
		return false;
	}
}

// Bool Load Doc
JMap2.prototype.setBoolLoadDoc = function( key )
{
	this.bool_load_doc[key] = true;

	this.callOnLoadFunc( key );
}
JMap2.prototype.getBoolLoadDoc = function( key )
{
	return this.bool_load_doc[key];
}

// ----------------------------------------------
// OnLoad GMap Functions
// ----------------------------------------------
JMap2.prototype.setOnLoadFunc = function( key, func )
{
	this.list_onload_func[key] = func;
}
JMap2.prototype.callOnLoadFunc = function( key )
{
	if(		this.getBoolLoadGFrame(key)
		&&	this.getBoolLoadDoc(key)
		&&	this.list_onload_func[key]
	){
		this.list_onload_func[key]( key );
	}
}

// ----------------------------------------------
// GMap Frame
// ----------------------------------------------
JMap2.prototype.setGMapFrame = function( gmap_frame_id, gFrame )
{
	gmap_frame_id = this.getGMapFrameId_default( gmap_frame_id );
	this.list_gmap_frames[gmap_frame_id] = gFrame;
}

JMap2.prototype.getGMapFrame = function( gmap_frame_id )
{
	gmap_frame_id = this.getGMapFrameId_default( gmap_frame_id );
	return this.list_gmap_frames[gmap_frame_id];
}

JMap2.prototype.getBoolGMapFrame = function( gmap_frame_id )
{
	return this.getBoolLoadGFrame( gmap_frame_id );
}

// ----------------------------------------------
// init JMap2GMap
// ----------------------------------------------
JMap2.prototype.setJMap2GMap = function( gmap_frame_id, gmap_obj_id, gmapFrameName, width, height )
{
	var obj_jmap2gmap = new JMap2GMap( this, gmap_frame_id, gmap_obj_id, gmapFrameName, width, height );

	if( this.list_jmap2gmap[gmap_frame_id] == null ){
		this.list_jmap2gmap[gmap_frame_id] = new Array();
	}
	this.addKeyEventFocus( obj_jmap2gmap.gFrame, obj_jmap2gmap.obj_gmap );
	this.list_jmap2gmap[gmap_frame_id][gmap_obj_id] = obj_jmap2gmap;
}

JMap2.prototype.getJMap2GMap = function( gmap_frame_id, gmap_obj_id )
{
	return this.list_jmap2gmap[gmap_frame_id][gmap_obj_id];
}

JMap2.prototype.getGMapObj = function( gmap_frame_id, gmap_obj_id )
{
	return this.list_jmap2gmap[gmap_frame_id][gmap_obj_id].obj_gmap;
}

JMap2.prototype.boolReadyMap = function( gmap_frame_id, gmap_obj_id )
{
	if( !gmap_obj_id ){
		return this.getBoolGMapFrame( gmap_frame_id );
	}else{
		if(		this.getBoolLoadGFrame( gmap_frame_id )
			&&	this.list_jmap2gmap[gmap_frame_id][gmap_obj_id]
		){
			return true;
		}
	}
	return false;
}


// ----------------------------------------------
//
// JMap2 JMarker container functions
//
// ----------------------------------------------
JMap2.prototype.setJMarker = function( obj_jmarker, gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var flg_exist_marker = false;
	for(var i = 0; i < this.list_jmarker.length; i++ ){
		if( 	( this.list_jmarker[i].gmap_frame_id	 == gmap_frame_id )
			&& 	( this.list_jmarker[i].gmap_obj_id	 == gmap_obj_id	)
			&& 	( this.list_jmarker[i].marker_user_id == marker_user_id )
			&&	( this.list_jmarker[i].marker_type_id == marker_type_id )
			&&	( this.list_jmarker[i].marker_uniq_id == marker_uniq_id )
		){
			this.removeMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );
			this.list_jmarker[i] = obj_jmarker;
			flg_exist_marker = true;
			break;
		}
	}

	if( flg_exist_marker == false ){
		this.list_jmarker.push( obj_jmarker );
	}
}

JMap2.prototype.addJMarker = function( obj_jmarkerOpts, gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );
	if( obj_jmarker ){
		return obj_jmarker;
	}

	var gFrame	= this.getGMapFrame(gmap_frame_id);
	obj_jmarker = new gFrame.JMarker( this.getGMapObj(gmap_frame_id, gmap_obj_id), obj_jmarkerOpts );

	obj_jmarker.gmap_frame_id	= gmap_frame_id;
	obj_jmarker.gmap_obj_id		= gmap_obj_id;
	obj_jmarker.marker_user_id	= marker_user_id;
	obj_jmarker.marker_type_id	= marker_type_id;
	obj_jmarker.marker_uniq_id	= marker_uniq_id;

	this.setJMarker( obj_jmarker, gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );

	// dblClick Zoom
	if( obj_jmarkerOpts.getBoolDblClickZoom() ){
		this.addJMarkerEvent_dblClickZoom( obj_jmarker, obj_jmarkerOpts.bool_dblClickZoomLevel );
	}
	// Shift Zoom
	if( obj_jmarkerOpts.getBoolShiftZoom() ){
		this.addJMarkerEvent_shiftZoom( obj_jmarker, obj_jmarkerOpts.bool_shiftZoomLevel );
	}

	return obj_jmarker;
}

JMap2.prototype.getJMarker = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jmarker.length; i++ ){
		if( 	( this.list_jmarker[i].gmap_frame_id	 == gmap_frame_id )
			&& 	( this.list_jmarker[i].gmap_obj_id	 == gmap_obj_id	)
			&& 	( this.list_jmarker[i].marker_user_id == marker_user_id )
			&&	( this.list_jmarker[i].marker_type_id == marker_type_id )
			&&	( this.list_jmarker[i].marker_uniq_id == marker_uniq_id )
		){
			return this.list_jmarker[i];
		}
	}
	return null;
}

// ---------------------------------------------
// Double Click Zoom
JMap2.prototype.addJMarkerEvent_dblClickZoom = function( obj_jmarker, zoomLevel )
{
	zoomLevel = zoomLevel ? zoomLevel : 15;
	// cancelBuuble するため、登録する
	if( obj_jmarker.obj_opts.boolTypeMarker('info') ){
		obj_jmarker.startEvent('dblclick');
	}
	obj_jmarker.setTrigger( 'dblclick', obj_jmarker.gFrame.GEvent.callbackArgs( this, this.callDblClickZoom, obj_jmarker.obj_marker, zoomLevel, obj_jmarker.gmap_frame_id, obj_jmarker.gmap_obj_id) );
}
JMap2.prototype.callDblClickZoom = function( obj_marker, zoomLevel, gmap_frame_id, gmap_obj_id )
{
	if(	obj_marker.obj_gmap.getZoom() >= zoomLevel	){
		zoomLevel = obj_marker.obj_gmap.getCurrentMapType().getMaximumResolution() - 1;
	}

	if(	zoomLevel != obj_marker.obj_gmap.getZoom() ){
		obj_marker.obj_gmap.Ext_setCenter( obj_marker.point, zoomLevel );
		if( !obj_marker.point.equals( obj_marker.obj_gmap.getCenter() ) ){
			this.getJMap2GMap(gmap_frame_id, gmap_obj_id).cancel_addMoveLog = true;
		}
	}else{
		// Sfhit Click Zoom の場合、 InfoWindow の RESET 処理を禁止する？
		// 移動しないなら、フラグを戻しておく
		this.getGMapObj(gmap_frame_id, gmap_obj_id).ext_cancel_reOpenInfoWin = false;
	}
}

// ---------------------------------------------
// Shift Zoom
JMap2.prototype.addJMarkerEvent_shiftZoom = function( obj_jmarker, zoomLevel )
{
	zoomLevel = zoomLevel ? zoomLevel : 15;
	obj_jmarker.setTrigger( 'click', obj_jmarker.gFrame.GEvent.callbackArgs( this, this.callShiftZoom, obj_jmarker.obj_marker, zoomLevel, obj_jmarker.gmap_frame_id, obj_jmarker.gmap_obj_id) );
}
JMap2.prototype.callShiftZoom = function( obj_marker, zoomLevel, gmap_frame_id, gmap_obj_id )
{
	if( this.bool_onShiftKey ){
		// Sfhit Click Zoom の場合、 InfoWindow の RESET 処理を禁止する？( ver 2.61 エラー )
		this.getGMapObj(gmap_frame_id, gmap_obj_id).ext_cancel_reOpenInfoWin = true;

		this.callDblClickZoom( obj_marker, zoomLevel, gmap_frame_id, gmap_obj_id);
		this.getJMap2GMap(gmap_frame_id, gmap_obj_id).bool_cancelClick = true;
	}
}

// ---------------------------------------------
// Pan Marker
JMap2.prototype.panToJMarker = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id, bool_arrow, bool_hover )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	if( this.getJMap2GMap( gmap_frame_id, gmap_obj_id ).bool_moving ){ return ;}

	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );
	if( obj_jmarker ){
		this.getGMapObj(gmap_frame_id, gmap_obj_id).Ext_panTo( obj_jmarker.getPoint() );

		if( bool_arrow ){
			this.getGMapFrame(gmap_frame_id).removeArrowAll();
			this.getGMapFrame(gmap_frame_id).showArrowWith_J_Marker( obj_jmarker )
		}

		if( bool_hover ){
			this.hideHoverAll( gmap_frame_id, gmap_obj_id );
			obj_jmarker.showHover();
		}
	}
}

// ---------------------------------------------
// Show, Hide
JMap2.prototype.showMarker = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );
	if( obj_jmarker ){
		obj_jmarker.show();
	}
}

JMap2.prototype.hideMarker = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );
	if( obj_jmarker ){
		obj_jmarker.hide();
	}
}

// ---------------------------------------------
// Show Marker All
JMap2.prototype.showMarkerAll = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jmarker.length; i++ ){
		if( 	( this.list_jmarker[i].gmap_frame_id  == gmap_frame_id )
			&& 	( this.list_jmarker[i].gmap_obj_id	  == gmap_obj_id	)
			&& 	( marker_user_id == null || this.list_jmarker[i].marker_user_id == marker_user_id	)
			&& 	( marker_type_id == null || this.list_jmarker[i].marker_type_id == marker_type_id	)
		){
			this.list_jmarker[i].show();
		}
	}
}

// Hide Marker All
JMap2.prototype.hideMarkerAll = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jmarker.length; i++ ){
		if( 	( this.list_jmarker[i].gmap_frame_id  == gmap_frame_id )
			&& 	( this.list_jmarker[i].gmap_obj_id	  == gmap_obj_id	)
			&& 	( marker_user_id == null || this.list_jmarker[i].marker_user_id == marker_user_id	)
			&& 	( marker_type_id == null || this.list_jmarker[i].marker_type_id == marker_type_id	)
		){
			this.list_jmarker[i].hide();
		}
	}
}

// ---------------------------------------------
// Hide Hover All
JMap2.prototype.hideHoverAll = function( gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jmarker.length; i++ ){
		if( 	( this.list_jmarker[i].gmap_frame_id == gmap_frame_id )
			&& 	( this.list_jmarker[i].gmap_obj_id	 == gmap_obj_id	)
		){
			this.list_jmarker[i].hideHover();
		}
	}
}

JMap2.prototype.rePosHoverAll = function( gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jmarker.length; i++ ){
		if( 	( this.list_jmarker[i].gmap_frame_id == gmap_frame_id )
			&& 	( this.list_jmarker[i].gmap_obj_id	 == gmap_obj_id	)
		){
			this.list_jmarker[i].rePosHover();
		}
	}
}


// ---------------------------------------------
// remove
JMap2.prototype.removeMarker = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );

	if( obj_jmarker ){
		obj_jmarker.removeOverlay();
	}
}


// ----------------------------------------------
//
// JMap2 JLine container functions
//
// ----------------------------------------------
JMap2.prototype.setJLine = function( obj_jline, gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var flg_exist_jline = false;
	for(var i = 0; i < this.list_jline.length; i++ ){
		if( 	( this.list_jline[i].gmap_frame_id	== gmap_frame_id )
			&& 	( this.list_jline[i].gmap_obj_id	== gmap_obj_id	)
			&& 	( this.list_jline[i].jline_user_id	== jline_user_id )
			&&	( this.list_jline[i].jline_type_id	== jline_type_id )
			&&	( this.list_jline[i].jline_uniq_id	== jline_uniq_id )
		){
			this.list_jline[i] = obj_jline;
			flg_exist_jline = true;
			break;
		}
	}

	if( flg_exist_jline == false ){
		this.list_jline.push( obj_jline );
	}
}

JMap2.prototype.addJLine = function( obj_jlineOpts, gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame		= this.getGMapFrame(gmap_frame_id);
	var obj_jline	= new gFrame.JLine( this.getGMapObj(gmap_frame_id, gmap_obj_id), obj_jlineOpts.point_list, obj_jlineOpts.color, obj_jlineOpts.weight, obj_jlineOpts.opacity );

	obj_jline.gmap_frame_id	= gmap_frame_id;
	obj_jline.gmap_obj_id	= gmap_obj_id;
	obj_jline.jline_user_id	= jline_user_id;
	obj_jline.jline_type_id	= jline_type_id;
	obj_jline.jline_uniq_id	= jline_uniq_id;

	this.setJLine( obj_jline, gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id );

	return obj_jline;
}

JMap2.prototype.getJLine = function( gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jline.length; i++ ){
		if( 	( this.list_jline[i].gmap_frame_id	 == gmap_frame_id )
			&& 	( this.list_jline[i].gmap_obj_id	 == gmap_obj_id	)
			&& 	( this.list_jline[i].jline_user_id	 == jline_user_id )
			&&	( this.list_jline[i].jline_type_id	 == jline_type_id )
			&&	( this.list_jline[i].jline_uniq_id	 == jline_uniq_id )
		){
			return this.list_jline[i];
		}
	}
	return null;
}

// ---------------------------------------------
// Hide Line
JMap2.prototype.showJLine = function( gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jline = this.getJLine(gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id);
	obj_jline.show();
}

JMap2.prototype.hideJLineAll = function( gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	for(var i = 0; i < this.list_jline.length; i++ ){
		if( 	( this.list_jline[i].gmap_frame_id	 == gmap_frame_id )
			&& 	( this.list_jline[i].gmap_obj_id	 == gmap_obj_id	)
		){
			this.list_jline[i].hide();
		}
	}
}

// ----------------------------------------------
//
// JMap2 Bound container functions
//
// ----------------------------------------------
JMap2.prototype.setJBound = function( obj_jbound, bound_user_id, bound_type_id, bound_uniq_id )
{
	var flg_exist_bound = false;
	for(var i = 0; i < this.list_jbound.length; i++ ){
		if(  	( this.list_jbound[i].bound_user_id	== bound_user_id )
			&&	( this.list_jbound[i].bound_type_id	== bound_type_id )
			&&	( this.list_jbound[i].bound_uniq_id	== bound_uniq_id )
		){
			this.list_jbound[i] = obj_jbound;
			flg_exist_bound = true;
			break;
		}
	}

	if( flg_exist_bound == false ){
		this.list_jbound.push( obj_jbound );
	}
}

JMap2.prototype.addJBound = function( gmap_frame_id, bound_user_id, bound_type_id, bound_uniq_id, bound )
{
	if( !this.boolReadyMap(gmap_frame_id) ){ return; }

	var gFrame		= this.getGMapFrame(gmap_frame_id);
	var obj_jbound	= new gFrame.JBound( bound );

	obj_jbound.bound_user_id	= bound_user_id;
	obj_jbound.bound_type_id	= bound_type_id;
	obj_jbound.bound_uniq_id	= bound_uniq_id;

	this.setJBound( obj_jbound, bound_user_id, bound_type_id, bound_uniq_id );

	return obj_jbound;
}

JMap2.prototype.getJBound = function( bound_user_id, bound_type_id, bound_uniq_id )
{
	for(var i = 0; i < this.list_jbound.length; i++ ){
		if( 	( this.list_jbound[i].bound_user_id == bound_user_id )
			&&	( this.list_jbound[i].bound_type_id == bound_type_id )
			&&	( this.list_jbound[i].bound_uniq_id == bound_uniq_id )
		){
			return this.list_jbound[i];
		}
	}
	return null;
}

JMap2.prototype.moveToJBound = function( gmap_frame_id, gmap_obj_id, bound_user_id, bound_type_id, bound_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	this.moveToBound( gmap_frame_id, gmap_obj_id, this.getJBound(bound_user_id, bound_type_id, bound_uniq_id).getBound() );
	this.rePosHoverAll( gmap_frame_id, gmap_obj_id );
}

// ----------------------------------------------
//
// Arrow container
//
// ----------------------------------------------
JMap2.prototype.removeArrowAll = function( gmap_frame_id )
{
	if( !this.boolReadyMap(gmap_frame_id) ){ return; }

	this.getGMapFrame(gmap_frame_id).removeArrowAll();
}

JMap2.prototype.showArrowJMarker = function( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id, bool_hideAll )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );
	if( obj_jmarker ){
		if( bool_hideAll ){
			this.getGMapFrame(gmap_frame_id).removeArrowAll();
		}
		this.getGMapFrame(gmap_frame_id).showArrowWith_J_Marker( obj_jmarker )
	}
}

JMap2.prototype.showArrowJLine = function( gmap_frame_id, gmap_obj_id, line_user_id, line_type_id, line_uniq_id, bool_hideAll )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_jline = this.getJLine( gmap_frame_id, gmap_obj_id, line_user_id, line_type_id, line_uniq_id );
	if( obj_jline ){
		if( bool_hideAll ){
			this.getGMapFrame(gmap_frame_id).removeArrowAll();
		}
		this.getGMapFrame(gmap_frame_id).showArrowWith_JLine( obj_jline );
	}
}


// ----------------------------------------------
//
// Ticker container functions
//
// ----------------------------------------------
JMap2.prototype.setTicker = function()
{
	this.obj_ticker = new Ticker( this );
}
JMap2.prototype.getTicker = function()
{
	return this.obj_ticker;
}
//
JMap2.prototype.startTicker = function( thisObj, thisEvent )
{
	if( !this.getBoolLoadMain() ){return;}

	JMap2CancelBubble( thisEvent );

	this.stopDrawline();
	if( this.getTicker() ){
		this.getTicker().startTicker( thisObj.id, thisEvent );
	}
}
JMap2.prototype.resetTicker = function( ticker_type_id, thisEvent )
{
	if( !this.getBoolLoadMain() ){return;}
	if( this.getTicker() ){
		this.getTicker().resetTicker( ticker_type_id, thisEvent );
	}
}
JMap2.prototype.resetTickerAll = function()
{
	if( !this.getBoolLoadMain() ){return;}
	if( this.getTicker() ){
		this.getTicker().cancelTicker();
	}
}

// ----------------------------------------------
//
// Liner container functions
//
// ----------------------------------------------
JMap2.prototype.setLiner = function()
{
	this.obj_liner = new Liner( this );
}
JMap2.prototype.getLiner = function()
{
	return this.obj_liner;
}
JMap2.prototype.startDrawline = function( drawline_type_id, thisEvent )
{
	if( !this.getBoolLoadMain() ){return;}

	if( this.getLiner() ){
		this.resetTickerAll();
		if( this.getLiner().bool_drawing == false ){
			this.getLiner().startDrawline( drawline_type_id, thisEvent );
		}else{
			this.getLiner().stopDrawline();
			if( this.getLiner().drawing_type_id != drawline_type_id ){
				this.getLiner().startDrawline( drawline_type_id, thisEvent );
			}
		}
	}
}
JMap2.prototype.stopDrawline = function()
{
	if( !this.getBoolLoadMain() ){return;}
	if( this.getLiner() ){
		this.getLiner().stopDrawline();
	}
}
JMap2.prototype.clearDrawline = function( drawline_type_id )
{
	if( !this.getBoolLoadMain() ){return;}
	if( this.getLiner() ){
		this.getLiner().clearDrawline( drawline_type_id );
	}
}

// ----------------------------------------------
//
// Ticker container functions
//
// ----------------------------------------------
JMap2.prototype.setPicker = function( gmap_frame_id, gmap_obj_id )
{
	this.obj_picker = new Picker( this, gmap_frame_id, gmap_obj_id )
	this.picker_gmap_frame_id	= gmap_frame_id;
	this.picker_gmap_obj_id		= gmap_obj_id;
}
JMap2.prototype.getPicker = function()
{
	return this.obj_picker;
}


//==================================================
//
// Ticker
//
//==================================================
function Ticker( obj_jmap2 )
{
	this.obj_jmap2			= obj_jmap2;

	this.src				= document.body;
	this.eventSrc			= this.src.setCapture ? this.src : window;
	this.layer_move			= this.src;

	this.list_tickerTypeObj	= new Array();
	this.bool_moving		= false;
	this.bool_dragging		= false;

	this.mouseMoveHandler	= JMap2EventHandler( this, "onMouseMove" );
	this.mouseClickHandler	= JMap2EventHandler( this, "onMouseClick" );
	this.mouseWinOutHandler	= JMap2EventHandler( this, "onMouseWinOut" );

	this.bool_eventDocument = false;
	this.bool_eventGMap		= false;
}

//-----------------------------
// AddType
Ticker.prototype.addType = function( ticker_type_id, obj_jmarker, gmap_frame_id, gmap_obj_id )
{
	if( !this.obj_jmap2.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_tickerType = new Object;
	var html = getJMarkerHtmlFromObj( obj_jmarker );

	obj_tickerType.bool_put_map		= false;

	obj_tickerType.ticker_type_id	= ticker_type_id;
	obj_tickerType.obj_jmarker		= obj_jmarker;
	obj_tickerType.html				= html;

	obj_tickerType.gmap_frame_id	= gmap_frame_id;
	obj_tickerType.gmap_obj_id		= gmap_obj_id;

	obj_tickerType.obj_jmap2gmap	= this.obj_jmap2.getJMap2GMap( gmap_frame_id, gmap_obj_id );

	// divTick
	var divTick			= JGetElementById( document, ticker_type_id )
	var divTickControl	= JGetElementById( document, ticker_type_id + '_control' )
	xInnerHtml( divTick, html );

	// divMove
	var divMove = JMapCreateDiv();
	divMove.style.position		= 'absolute';
	divMove.style.visibility	= 'hidden';
	xInnerHtml( divMove, html );

	obj_tickerType.divTick	 		= divTick;
	obj_tickerType.divTickControl 	= divTickControl;
	obj_tickerType.divMove			= divMove;
	obj_tickerType.divMovePos		= new Position(0,0);

	// getSize
	this.layer_move.appendChild( divMove );
	obj_tickerType.divSize = getDivSize(divMove);

	this.list_tickerTypeObj[ticker_type_id] = obj_tickerType;

	// info の場合、削除時にTICKを戻す
	if( obj_jmarker.obj_opts.boolTypeMarker('info') ){
		var gFrame = this.obj_jmap2.getGMapFrame(gmap_frame_id);
		var obj_jinfo_marker = obj_jmarker.obj_marker;
		gFrame.GEvent.bindDom( obj_jinfo_marker.obj_divInfoCloser, 'click', this, gFrame.GEvent.callbackArgs(this, this.callDelTickerInfo, obj_jinfo_marker, ticker_type_id) );
	}

	return obj_tickerType;
}

Ticker.prototype.callDelTickerInfo = function( obj_jinfo_marker, ticker_type_id )
{
	this.cancelTicker();

	this.showTickerTick( ticker_type_id );
	this.hideTickerMove( ticker_type_id );

	obj_jinfo_marker.hideInfo();
	this.getTickerTypeObj(ticker_type_id).bool_put_map = false;

	this.hideTickerTickControl( ticker_type_id );
}

//-----------------------------
// 初期状態を設定
Ticker.prototype.initTicker = function( ticker_type_id, bool_overlay_marker )
{
	var obj_tickerType	= this.getTickerTypeObj(ticker_type_id);
	var obj_jmarker		= obj_tickerType.obj_jmarker;

	// 配置済
	if( bool_overlay_marker ){
		if( obj_jmarker.obj_marker.bool_overlay == false ){
			obj_jmarker.addOverlay();
		}

		this.hideTickerTick( ticker_type_id );
		this.hideTickerMove( ticker_type_id );

		obj_tickerType.bool_put_map = true;

		this.showTickerTickControl( ticker_type_id );

	// 配置前の初期状態
	}else{
		obj_jmarker.hide();
		this.showTickerTick( ticker_type_id );
		this.hideTickerMove( ticker_type_id );

		obj_tickerType.bool_put_map = false;

		this.hideTickerTickControl( ticker_type_id );
	}
}

//-----------------------------
// get
Ticker.prototype.getTickerTypeObj = function( ticker_type_id )
{
	return this.list_tickerTypeObj[ticker_type_id];
}

//-----------------------------
// reset
Ticker.prototype.resetTicker = function( ticker_type_id )
{
	var obj_tickerType = this.getTickerTypeObj(ticker_type_id);

	this.cancelTicker();
	this.showTickerTick( ticker_type_id );
	this.hideTickerMove( ticker_type_id );

	obj_tickerType.obj_jmarker.hide();
	obj_tickerType.bool_put_map = false;

	this.hideTickerTickControl( ticker_type_id );

	obj_tickerType.obj_jmap2gmap.gFrame.obj_infowin.removeAll();
}

//-----------------------------
// Pos
Ticker.prototype.setTickerMovePos = function( ticker_type_id, objPos )
{
	var obj_tickerType = this.getTickerTypeObj(ticker_type_id);

	obj_tickerType.divMovePos = objPos;

	var obj_jmarker = obj_tickerType.obj_jmarker;

	if( obj_jmarker.obj_opts.boolTypeMarker('info') ){
		if( obj_jmarker.obj_opts.getTypeArrow() == 'down' ){
			setDivPosXY( obj_tickerType.divMove, objPos.x - ( obj_tickerType.divSize.width / 2), objPos.y - obj_tickerType.divSize.height );
		}else if( obj_jmarker.obj_opts.getTypeArrow() == 'left' ){
			setDivPosXY( obj_tickerType.divMove, objPos.x, objPos.y - obj_tickerType.divSize.height );
		}else if( obj_jmarker.obj_opts.getTypeArrow() == 'right' ){
			setDivPosXY( obj_tickerType.divMove, objPos.x - obj_tickerType.divSize.width, objPos.y - obj_tickerType.divSize.height );
		}
	}else{
		setDivPosXY( obj_tickerType.divMove, objPos.x - ( obj_tickerType.divSize.width / 2), objPos.y - obj_tickerType.divSize.height );
	}
}

//-----------------------------
// show,hide
Ticker.prototype.showTickerTick = function( ticker_type_id )
{
	showDiv( this.getTickerTypeObj(ticker_type_id).divTick );
}
Ticker.prototype.hideTickerTick = function( ticker_type_id )
{
	hideDiv( this.getTickerTypeObj(ticker_type_id).divTick );
}
Ticker.prototype.showTickerTickControl = function( ticker_type_id )
{
	if( this.getTickerTypeObj(ticker_type_id).divTickControl ){
		showDivBlock( this.getTickerTypeObj(ticker_type_id).divTickControl );
	}
}
Ticker.prototype.hideTickerTickControl = function( ticker_type_id )
{
	if( this.getTickerTypeObj(ticker_type_id).divTickControl ){
		hideDivBlock( this.getTickerTypeObj(ticker_type_id).divTickControl );
	}
}

Ticker.prototype.showTickerMove = function( ticker_type_id )
{
	showDiv( this.getTickerTypeObj(ticker_type_id).divMove );
}
Ticker.prototype.hideTickerMove = function( ticker_type_id )
{
	hideDiv( this.getTickerTypeObj(ticker_type_id).divMove );
}

//-----------------------------
// Event

// Start
Ticker.prototype.startTicker = function( ticker_type_id, thisEvent )
{
	this.cancelTicker();

	this.bool_moving			= true;
	this.moving_ticker_type_id	= ticker_type_id;

	this.hideTickerTick( ticker_type_id );
	this.showTickerMove( ticker_type_id );

	// 初期座標
	if( thisEvent ){
		this.onMouseMove( thisEvent );
	}else{
		this.setTickerMovePos( ticker_type_id, new Position(-1000, -1000) );
	}

	if( thisEvent ){
		JMap2CancelBubble( thisEvent );
	}

	if( this.src.setCapture ){
		this.src.setCapture();
	}

	// Document.body リスナー
	this.bool_eventDocument = true;

	JMap2AttachEvent(this.eventSrc,	"mousemove", this.mouseMoveHandler);
	JMap2AttachEvent(this.eventSrc,	"click",	 this.mouseClickHandler);
	if( obj_browser.bool_mozilla ){
		JMap2AttachEvent(window, "mouseout", this.mouseWinOutHandler);
	}

	// GMap リスナー
	this.bool_eventGMap = true;

	var obj_tickerType	= this.getTickerTypeObj( ticker_type_id );
	var obj_jmarker		= obj_tickerType.obj_jmarker;
	var gFrame			= obj_jmarker.gFrame;
	var obj_gmap		= obj_jmarker.obj_gmap;

	this.gmapListenr_mousedrag		= gFrame.GEvent.bind(obj_gmap, "drag",		this, this.GMapListen_mouseDrag);
	this.gmapListenr_mousedragstart	= gFrame.GEvent.bind(obj_gmap, "dragstart",	this, this.GMapListen_mouseDragStart);
	this.gmapListenr_mousedragend	= gFrame.GEvent.bind(obj_gmap, "dragend",	this, this.GMapListen_mouseDragEnd);
	this.gmapListenr_mousemove		= gFrame.GEvent.bind(obj_gmap, "mousemove",	this, this.GMapListen_mouseMove);
	this.gmapListenr_mouseclick		= gFrame.GEvent.bind(obj_gmap, "click",		this, this.GMapListen_mouseClick);

	//
	obj_jmarker.hide();

	//
	obj_tickerType.obj_jmap2gmap.rePosGMapFrame();
}

//------------------------
// Document Event

// Move
Ticker.prototype.onMouseMove = function( thisEvent )
{
	if( this.bool_moving ){
		this.setTickerMovePos( this.moving_ticker_type_id, obj_browser.getMousePos(thisEvent) );
	}
}

// Click
Ticker.prototype.onMouseClick = function( thisEvent )
{
	if( this.bool_moving && !this.bool_dragging){

		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		var obj_jmarker		= obj_tickerType.obj_jmarker;
		var gFrame			= obj_jmarker.gFrame;
		var obj_gmap		= obj_jmarker.obj_gmap;
		var obj_jmap2gmap	= obj_tickerType.obj_jmap2gmap;

		var pos_mouse		= obj_browser.getMousePos(thisEvent);
		var pos_gFrame		= obj_jmap2gmap.gmapFramePos;

		if(		pos_mouse.x >= pos_gFrame.x
			&&	pos_mouse.x <= pos_gFrame.x + obj_jmap2gmap.gmapDivSize.width
			&&	pos_mouse.y >= pos_gFrame.y
			&&	pos_mouse.y <= pos_gFrame.y + obj_jmap2gmap.gmapDivSize.height
		){
			var bound		= obj_gmap.getBounds();
			var point_SW	= bound.getSouthWest();
			var point_NE	= bound.getNorthEast();

			var pos_corner	= obj_gmap.fromLatLngToDivPixel( new gFrame.GLatLng(point_NE.lat(), point_SW.lng()) );
			var mouse_point = new gFrame.GPoint( pos_corner.x + pos_mouse.x - pos_gFrame.x, pos_corner.y + pos_mouse.y - pos_gFrame.y );

			this.putMarker( obj_jmarker, obj_gmap.fromDivPixelToLatLng(mouse_point) );

			this.endTicker();
		}else{
			this.cancelTicker();
		}

		JMap2CancelBubble( thisEvent );
	}
}

function getGMapDivPosFromMousePos( obj_jmap2gmap, pos_mouse )
{
	var gFrame		= obj_jmap2gmap.gFrame;
	var obj_gmap	= obj_jmap2gmap.obj_gmap;

	var pos_gFrame	= obj_jmap2gmap.gmapFramePos;

	var bound		= obj_gmap.getBounds();
	var point_SW	= bound.getSouthWest();
	var point_NE	= bound.getNorthEast();

	var pos_corner	= obj_gmap.fromLatLngToDivPixel( new gFrame.GLatLng(point_NE.lat(), point_SW.lng()) );
	var mouse_divPos= new gFrame.GPoint( pos_corner.x + pos_mouse.x - pos_gFrame.x, pos_corner.y + pos_mouse.y - pos_gFrame.y );

	return mouse_divPos;
}

// WinOut
Ticker.prototype.onMouseWinOut = function( thisEvent )
{
	if( this.bool_moving ){
		if( !thisEvent.relatedTarget ){
			this.cancelTicker();
		}
	}
}

//------------------------
// GMap Mouse Event

// Drag
Ticker.prototype.GMapListen_mouseDragStart = function()
{
	if( this.bool_moving ){
		this.bool_dragging = true;

		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		hideDiv( obj_tickerType.divMove );
	}
}
Ticker.prototype.GMapListen_mouseDragEnd = function()
{
	if( this.bool_moving ){
		this.bool_dragging = false;

		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		showDiv( obj_tickerType.divMove );
	}
}
Ticker.prototype.GMapListen_mouseDrag = function()
{
	if( this.bool_moving && this.bool_dragging){
		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		var obj_jmarker		= obj_tickerType.obj_jmarker;
		var gFrame			= obj_jmarker.gFrame;
		var obj_gmap		= obj_jmarker.obj_gmap;
		var obj_jmap2gmap	= obj_tickerType.obj_jmap2gmap;

		var bound		= obj_gmap.getBounds();
		var point_SW	= bound.getSouthWest();
		var point_NE	= bound.getNorthEast();

		var pos_mouse	= this.pos_mouse_moving;
		var pos_corner	= obj_gmap.fromLatLngToDivPixel( new gFrame.GLatLng(point_NE.lat(), point_SW.lng()) );

		var pos_innerGFrame = new Position( pos_mouse.x - pos_corner.x, pos_mouse.y - pos_corner.y );

		var mousePos	= new Position( obj_jmap2gmap.gmapFramePos.x + pos_innerGFrame.x, obj_jmap2gmap.gmapFramePos.y + pos_innerGFrame.y );

		this.setTickerMovePos( this.moving_ticker_type_id, mousePos );
	}
}
// Move
Ticker.prototype.GMapListen_mouseMove = function( point )
{
	if( this.bool_moving ){
		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		var obj_jmarker		= obj_tickerType.obj_jmarker;
		var gFrame			= obj_jmarker.gFrame;
		var obj_gmap		= obj_jmarker.obj_gmap;
		var obj_jmap2gmap	= obj_tickerType.obj_jmap2gmap;

		var bound		= obj_gmap.getBounds();
		var point_SW	= bound.getSouthWest();
		var point_NE	= bound.getNorthEast();

		var pos_mouse	= obj_gmap.fromLatLngToDivPixel( point );
		var pos_corner	= obj_gmap.fromLatLngToDivPixel( new gFrame.GLatLng(point_NE.lat(), point_SW.lng()) );

		this.pos_mouse_moving = pos_mouse;

		var pos_innerGFrame = new Position( pos_mouse.x - pos_corner.x, pos_mouse.y - pos_corner.y );

		var mousePos	= new Position( obj_jmap2gmap.gmapFramePos.x + pos_innerGFrame.x, obj_jmap2gmap.gmapFramePos.y + pos_innerGFrame.y );

		this.setTickerMovePos( this.moving_ticker_type_id, mousePos );
	}
}

// Click
Ticker.prototype.GMapListen_mouseClick = function( marker, point )
{
	if( this.bool_moving && !this.bool_dragging){

		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		var obj_jmarker		= obj_tickerType.obj_jmarker;

		if( marker ){
			point = marker.getPoint();
		}

		this.putMarker( obj_jmarker, point );

		this.endTicker();
	}
}

// ----------------------------------------
// Put Marker
Ticker.prototype.putMarker = function( obj_jmarker, point )
{
	// addOverlay してからじゃないと setPoint は動作しない
	if( obj_jmarker.obj_marker.bool_overlay == false ){
		obj_jmarker.addOverlay();
	}

	obj_jmarker.setPoint( point );

	obj_jmarker.show();

	var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
	obj_tickerType.bool_put_map = true;

	this.showTickerTickControl( this.moving_ticker_type_id );
}

// ----------------------------------------
// Cancel
Ticker.prototype.cancelTicker = function()
{
	this.delEvent();

	// 初期位置に戻す
	if( this.bool_moving ){
		this.showTickerTick( this.moving_ticker_type_id );
		this.hideTickerMove( this.moving_ticker_type_id );
	}

	this.bool_moving = false;
}

// 配置終了
Ticker.prototype.endTicker = function()
{
	this.delEvent();

	if( this.bool_moving ){
		this.hideTickerTick( this.moving_ticker_type_id );
		this.hideTickerMove( this.moving_ticker_type_id );
	}

	this.bool_moving = false;
}

// Del
Ticker.prototype.delEvent = function()
{
	// DocumentBody Listenr
	if( this.bool_eventDocument ){
		JMap2DetachEvent(this.eventSrc,	"mousemove", this.mouseMoveHandler);
		JMap2DetachEvent(this.eventSrc,	"click",	 this.mouseClickHandler);
		if( obj_browser.bool_mozilla ){
			JMap2DetachEvent(window, "mouseout", this.mouseWinOutHandler);
		}

		this.bool_eventDocument = false;
	}

	// GMap Listener
	if( this.bool_eventGMap ){
		var obj_tickerType	= this.getTickerTypeObj( this.moving_ticker_type_id );
		var obj_jmarker		= obj_tickerType.obj_jmarker;
		var gFrame			= obj_jmarker.gFrame;

		gFrame.GEvent.removeListener( this.gmapListenr_mousemove );
		gFrame.GEvent.removeListener( this.gmapListenr_mouseclick );
		gFrame.GEvent.removeListener( this.gmapListenr_mousedrag );
		gFrame.GEvent.removeListener( this.gmapListenr_mousedragstart );
		gFrame.GEvent.removeListener( this.gmapListenr_mousedragend );

		this.bool_eventGMap = false;
	}

	if(document.releaseCapture){
		document.releaseCapture()
	}
}

//==================================================
//
// Liner
//
//==================================================
function Liner( obj_jmap2 )
{
	this.obj_jmap2			= obj_jmap2;

	this.bool_drawing		= false;
	this.drawing_type_id	= 0;
	this.list_obj_drawline	= new Array();
}

// add
Liner.prototype.addType = function( drawline_type_id, obj_drawline, gmap_frame_id, gmap_obj_id, bool_ctrlDelete )
{
	if( !this.obj_jmap2.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_drawlineType = new Object();

	obj_drawlineType.drawline_type_id	= drawline_type_id;
	obj_drawlineType.obj_drawline	 	= obj_drawline;
	obj_drawlineType.gmap_frame_id		= gmap_frame_id;
	obj_drawlineType.gmap_obj_id		= gmap_obj_id;

	var divSwitch = JGetElementById( document, drawline_type_id );
	obj_drawlineType.divSwitch = divSwitch;

	obj_drawlineType.gFrame			= this.obj_jmap2.getGMapFrame( gmap_frame_id );
	obj_drawlineType.obj_gmap		= this.obj_jmap2.getGMapObj( gmap_frame_id, gmap_obj_id );
	obj_drawlineType.bool_drawing	= false;

	this.list_obj_drawline[drawline_type_id] = obj_drawlineType;

	if( bool_ctrlDelete ){
		this.addCtrlDelete( drawline_type_id );
	}
}
Liner.prototype.getDrawlineTypeObj = function( drawline_type_id )
{
	return this.list_obj_drawline[drawline_type_id];
}
// add Ctrl Delete
Liner.prototype.addCtrlDelete = function( drawline_type_id )
{
	var obj_drawlineType = this.getDrawlineTypeObj( drawline_type_id );
	obj_drawlineType.obj_drawline.setTrigger('click', JMap2EventHandler(this, 'callCtrlMarker', obj_drawlineType.obj_drawline) );
}
Liner.prototype.callCtrlMarker = function( obj_jmarker, obj_drawline )
{
	if( this.obj_jmap2.bool_onCtrlKey ){
		var point_no = obj_jmarker.drawline_point_no;
		obj_drawline.delPoint( point_no );
	}
}

// clear
Liner.prototype.clearDrawline = function( drawline_type_id )
{
	var obj_drawlineType = this.getDrawlineTypeObj( drawline_type_id );
	obj_drawlineType.obj_drawline.delPointAll();
}

//-----------------------------
// 初期状態を設定
Liner.prototype.initLiner = function( drawline_type_id, bool_show_marker )
{
}

//-----------------
// start
Liner.prototype.startDrawline = function( drawline_type_id, thisEvent )
{
	// Event
	this.delAllListener();
	this.switchOffAll();

	var obj_drawlineType = this.getDrawlineTypeObj( drawline_type_id );

	obj_drawlineType.onClickHandler = obj_drawlineType.gFrame.GEvent.bind(obj_drawlineType.obj_gmap, "click", this, this.onClick );
	obj_drawlineType.bool_drawing	= true;

	this.bool_drawing 		= true;
	this.drawing_type_id	= drawline_type_id;

	this.switchOn( drawline_type_id );
}
// stop
Liner.prototype.stopDrawline = function()
{
	this.delAllListener();
	this.switchOffAll();
	this.bool_drawing = false;
}

//-----------------
// Event

// onClick Handler

// JIconMarker クリック
Liner.prototype.onClick = function(marker, point)
{
	if( this.obj_jmap2.getPicker() && this.obj_jmap2.getPicker().bool_dragging ){
		return;
	}

	if( this.bool_drawing){
		var obj_drawlineType = this.getDrawlineTypeObj( this.drawing_type_id );

		obj_drawlineType.gFrame.obj_infowin.removeAll();

		if( marker ){
			if( !this.obj_jmap2.bool_onCtrlKey ){
				obj_drawlineType.obj_drawline.addPoint( marker.getPoint(), 'bool_show');
			}
		}else{
			obj_drawlineType.obj_drawline.addPoint(point, 'bool_show');
		}
	}
}
// JInfoMarker クリック
Liner.prototype.onClick_JInfoMarker = function( obj_jinfo_marker )
{
	if( obj_jinfo_marker.bool_cancelClick ){
		obj_jinfo_marker.bool_cancelClick = false;
		return;
	}

	if( this.obj_jmap2.getPicker() && this.obj_jmap2.getPicker().bool_dragging ){
		return;
	}

	if( this.bool_drawing){
		var obj_drawlineType = this.getDrawlineTypeObj( this.drawing_type_id );
		obj_drawlineType.obj_drawline.addPoint( obj_jinfo_marker.getPoint(), 'bool_show');
	}
}

// Del
Liner.prototype.delAllListener = function()
{
	for( var drawline_type_id in this.list_obj_drawline ){
		var obj_drawlineType = this.getDrawlineTypeObj( drawline_type_id );
		if( obj_drawlineType.bool_drawing ){
			obj_drawlineType.gFrame.GEvent.removeListener(obj_drawlineType.onClickHandler);
			obj_drawlineType.bool_drawing = false;
		}
	}
}

//-----------------
// switch
Liner.prototype.switchOn = function( drawline_type_id )
{
	var obj_drawlineType = this.getDrawlineTypeObj( drawline_type_id );
	obj_drawlineType.divSwitch.style.backgroundColor = "#ffffcc";
}
Liner.prototype.switchOff = function( drawline_type_id )
{
	var obj_drawlineType = this.getDrawlineTypeObj( drawline_type_id );
	obj_drawlineType.divSwitch.style.backgroundColor = "#cccccc";
}
Liner.prototype.switchOffAll = function()
{
	for( var drawline_type_id in this.list_obj_drawline ){
		this.switchOff( drawline_type_id );
	}
}

//==================================================
//
// Picker
//
//==================================================
function Picker( obj_jmap2, gmap_frame_id, gmap_obj_id )
{
	this.src			= document.body;
	this.eventSrc		= this.src.setCapture ? this.src : window;

	this.obj_jmap2		= obj_jmap2;
	this.gmap_frame_id	= gmap_frame_id;
	this.gmap_obj_id	= gmap_obj_id;

	this.bool_dragging	= false;
	this.bool_enable	= false;
	this.bool_show		= false;

	var gFrame		= obj_jmap2.getGMapFrame( gmap_frame_id );
	var obj_gmap	= obj_jmap2.getGMapObj( gmap_frame_id, gmap_obj_id );

	this.gFrame			= gFrame;
	this.obj_gmap		= obj_gmap;
	this.obj_jmap2gmap	= obj_jmap2.getJMap2GMap( gmap_frame_id, gmap_obj_id );
	this.layer_put		= obj_gmap.getPane(gFrame.G_MAP_FLOAT_PANE);

	// div
	var divPicker = gFrame.JMapCreatePickerDiv();
	divPicker.style.border		= '2px';
	divPicker.style.borderStyle	= 'dashed';
	this.divPicker = divPicker;

	this.layer_put.appendChild( divPicker );
}

// Start
Picker.prototype.startPicker = function( thisEvent, gmap_frame_id, gmap_obj_id )
{
	if( !this.obj_jmap2.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	if(		 this.gmap_frame_id == gmap_frame_id
		&&	 this.gmap_obj_id == gmap_obj_id
	){
		this.delEvent();

		this.gmapListenr_onclick	= this.gFrame.GEvent.bind(this.obj_gmap, "click",		this, this.onClick );
		this.gmapListenr_mouseout	= this.gFrame.GEvent.bind(this.obj_gmap, "mouseout",	this, this.onMouseOut );
		this.gmapListenr_mousemove	= this.gFrame.GEvent.bind(this.obj_gmap, "mousemove",	this, this.onMouseMove );

		this.bool_dragging	= true;
		this.bool_enable	= false;
		this.pos_dragStart	= null;

	//	this.gFrame.GLog.write( 'startPicker' );

		this.obj_jmap2gmap.rePosGMapFrame();
	}
}

// Event
Picker.prototype.onMouseMove = function( point )
{
	if( this.bool_dragging ){

		var bound = this.obj_gmap.getBounds();

		if( bound.contains(point) ){
			var point_SW = bound.getSouthWest();
			var point_NE = bound.getNorthEast();

			var pos_innerMouseDiv	= this.obj_gmap.fromLatLngToDivPixel( point );
			var pos_corner			= this.obj_gmap.fromLatLngToDivPixel( new this.gFrame.GLatLng(point_NE.lat(), point_SW.lng()) );
			var pos_innerGFrame		= new Position( pos_innerMouseDiv.x - pos_corner.x, pos_innerMouseDiv.y - pos_corner.y );

			var pos_mouse = new Position( this.obj_jmap2gmap.gmapFramePos.x + pos_innerGFrame.x, this.obj_jmap2gmap.gmapFramePos.y + pos_innerGFrame.y );

			var thisDivPos = getGMapDivPosFromMousePos( this.obj_jmap2gmap, pos_mouse );

			// Pos start Drag
			if( this.pos_dragStart == null ){
				this.pos_dragStart = thisDivPos;
			}

			this.pos_dragEnd = thisDivPos;

			var divSize = new Size( this.pos_dragEnd.x - this.pos_dragStart.x, this.pos_dragEnd.y - this.pos_dragStart.y);

			if( Math.abs(divSize.width) > 10 && Math.abs(divSize.height) > 10 ){
				this.showPicker();
				this.bool_enable = true;
			}

			if( this.bool_enable ){
				if( divSize.width > 0 ){
					setDivPosX( this.divPicker, this.pos_dragStart.x );
				}else{
					setDivPosX( this.divPicker, this.pos_dragEnd.x );
				}

				if( divSize.height > 0 ){
					setDivPosY( this.divPicker, this.pos_dragStart.y );
				}else{
					setDivPosY( this.divPicker, this.pos_dragEnd.y );
				}

				divSize.width  = Math.abs( divSize.width );
				divSize.height = Math.abs( divSize.height );

				setDivSize( this.divPicker, divSize );
			}

		}else{
			this.stopPicker();
		}
	}
}
Picker.prototype.onClick = function( thisEvent )
{
	if( this.bool_dragging && this.bool_enable){
		this.stopPicker();
		this.setPosZoom( this.pos_dragStart, this.pos_dragEnd );
	}
}
Picker.prototype.onMouseOut = function()
{
	this.stopPicker();
}

// Del Event
Picker.prototype.stopPicker = function()
{
	this.hidePicker();
	if( this.bool_dragging ){
		this.bool_dragging	= false;
		this.bool_enable	= false;
	}
}

Picker.prototype.delEvent = function()
{
	if( this.gmapListenr_onclick ){
		this.gFrame.GEvent.removeListener( this.gmapListenr_onclick );
	}
	if( this.gmapListenr_mouseout ){
		this.gFrame.GEvent.removeListener( this.gmapListenr_mouseout );
	}
	if( this.gmapListenr_mousemove ){
		this.gFrame.GEvent.removeListener( this.gmapListenr_mousemove );
	}
	this.bool_dragging	= false;
	this.bool_enable	= false;
}

// setMove
Picker.prototype.setPosZoom = function( posStart, posEnd )
{
	var gFrame 	 = this.gFrame;
	var obj_gmap = this.obj_gmap;

	var pos		= new Position( posStart.x <= posEnd.x ? posStart.x : posEnd.x, posStart.y <= posEnd.y ? posStart.y : posEnd.y );
	var posSize = new Size( Math.abs(posEnd.x - posStart.x), Math.abs(posEnd.y - posStart.y) );

	var LL_SW = this.obj_gmap.fromDivPixelToLatLng( new gFrame.GPoint(pos.x, pos.y + posSize.height) );
	var LL_NE = this.obj_gmap.fromDivPixelToLatLng( new gFrame.GPoint(pos.x + posSize.width, pos.y) );

	var bound = new this.gFrame.GLatLngBounds( LL_SW, LL_NE );

	var zoomLevel = obj_gmap.getBoundsZoomLevel(bound);

	obj_gmap.Ext_setCenter( new gFrame.GLatLng( (LL_SW.lat() + LL_NE.lat()) / 2, (LL_SW.lng() + LL_NE.lng()) /2 ), zoomLevel);

	if( zoomLevel == obj_gmap.getZoom() ){
		this.obj_jmap2.rePosHoverAll( this.gmap_frame_id, this.gmap_obj_id );
	}
}

// show,Hide
Picker.prototype.showPicker = function()
{
	if( this.bool_show == false ){
		showDiv( this.divPicker );
		this.bool_show = true;
	}
}

Picker.prototype.hidePicker = function()
{
	if( this.bool_show == true ){
		hideDiv( this.divPicker );
		this.bool_show = false;
	}
}

//==================================================
//
// submit Form
//
//==================================================

// ---------------------------------------
// JMarker 
JMap2.prototype.submitForm_JMarkers = function( form, gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var tagName = this.getTagName( 'marker', marker_user_id, marker_type_id, marker_uniq_id );

	var flg_add = false;
	for(var i = 0; i < this.list_jmarker.length; i++ ){
		var obj_jmarker = this.list_jmarker[i];

		if( 	( obj_jmarker.gmap_frame_id  == gmap_frame_id )
			&& 	( obj_jmarker.gmap_obj_id	 == gmap_obj_id	)
			&& 	( obj_jmarker.marker_user_id == marker_user_id )
			&&	( obj_jmarker.marker_type_id == marker_type_id )
			&&	( obj_jmarker.marker_uniq_id == marker_uniq_id )
			&&  ( obj_jmarker.getBoolShow() )
		){
			jlib.setFormValue( form, this.getTagName(tagName, 'bool'), 'on' );
			// lat,lng
			jlib.setFormValue( form, this.getTagName(tagName, 'lat'), obj_jmarker.getPoint().lat() );
			jlib.setFormValue( form, this.getTagName(tagName, 'lng'), obj_jmarker.getPoint().lng() );
			flg_add = true;
			break;
		}
	}

	if( flg_add == false ){
		jlib.setFormValue( form, this.getTagName(tagName, 'bool'), '' );
	}

}

// ---------------------------------------
// JDrawLine
JMap2.prototype.submitForm_Liner = function( form, gmap_frame_id, gmap_obj_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	if( this.getLiner() ){

		for( var drawline_type_id in this.getLiner().list_obj_drawline ){
			var obj_drawlineType = this.getLiner().getDrawlineTypeObj( drawline_type_id );
			var obj_drawline	 = obj_drawlineType.obj_drawline;

			var tagName = this.getTagName( 'liner', obj_drawlineType.drawline_type_id);

			if( 	( obj_drawlineType.gmap_frame_id	== gmap_frame_id )
				&& 	( obj_drawlineType.gmap_obj_id		== gmap_obj_id	)
				&&	( obj_drawline.bool_overlay )
				&&	(obj_drawline.getPointNum() >= 2)
			){
				jlib.setFormValue( form, this.getTagName(tagName, 'bool'), 'on' );

				// point_num
				jlib.setFormValue( form, this.getTagName(tagName, 'point_max'), obj_drawline.getPointNum() );

				// lat,lng
				for( var j = 0; j < obj_drawline.getPointNum(); j++ ){
					jlib.setFormValue( form, this.getTagName(tagName, 'point', j, 'lat'), obj_drawline.getPoint(j).lat() );
					jlib.setFormValue( form, this.getTagName(tagName, 'point', j, 'lng'), obj_drawline.getPoint(j).lng() );
				}

			}else{
				jlib.setFormValue( form, this.getTagName(tagName, 'bool'), '' );
			}
		}

	}
}

// ---------------------------------------
// Form LIB
// ---------------------------------------
JMap2.prototype.getTagName = function( tagName, arg1, arg2, arg3, arg4 )
{
	var tagNameList = new Array( tagName );
	if( arg1 != null ){ tagNameList.push(arg1); }
	if( arg2 != null ){ tagNameList.push(arg2); }
	if( arg3 != null ){ tagNameList.push(arg3); }
	if( arg4 != null ){ tagNameList.push(arg4); }
	return tagNameList.join('<=>');
}

//==================================================
//
// calc Bounds
//
//==================================================
JMap2.prototype.calcBoundsJMarkers = function( bound, gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, bool_non_check_show )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame	 = this.getGMapFrame( gmap_frame_id );

	for(var i = 0; i < this.list_jmarker.length; i++ ){
		var obj_jmarker = this.list_jmarker[i];
		if( 	( obj_jmarker.gmap_frame_id  == gmap_frame_id )
			&& 	( obj_jmarker.gmap_obj_id	 == gmap_obj_id	)
			&& 	( !marker_user_id || (obj_jmarker.marker_user_id == marker_user_id) )
			&&	( !marker_type_id || (obj_jmarker.marker_type_id == marker_type_id) )
			&&  ( bool_non_check_show || obj_jmarker.getBoolShow() )
		){
			if( bound == null ){
				bound = new gFrame.GLatLngBounds( obj_jmarker.getPoint(), obj_jmarker.getPoint() );
			}else{
				bound.extend( obj_jmarker.getPoint() );
			}
		}
	}

	return bound;
}

JMap2.prototype.calcBoundsJDrawLiners = function( bound, gmap_frame_id, gmap_obj_id, drawline_type_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame	 = this.getGMapFrame( gmap_frame_id );

	if( this.getLiner() ){
		var obj_drawlineType = this.getLiner().getDrawlineTypeObj( drawline_type_id );
		var obj_drawline	 = obj_drawlineType.obj_drawline;

		if( 	( obj_drawlineType.gmap_frame_id	== gmap_frame_id )
			&& 	( obj_drawlineType.gmap_obj_id		== gmap_obj_id	)
			&&	( obj_drawline.bool_overlay )
			&&	( obj_drawline.getPointNum() >= 2)
		){
			// lat,lng
			for( var j = 0; j < obj_drawline.getPointNum(); j++ ){
				if( bound == null ){
					bound = new gFrame.GLatLngBounds( obj_drawline.getPoint(j), obj_drawline.getPoint(j) );
				}else{
					bound.extend( obj_drawline.getPoint(j) );
				}
			}
		}
	}

	return bound;
}

JMap2.prototype.calcBoundsLiners = function( bound, gmap_frame_id, gmap_obj_id, line_user_id, line_type_id, line_uniq_id )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame	 = this.getGMapFrame( gmap_frame_id );

	for(var i = 0; i < this.list_jline.length; i++ ){
		var obj_jline = this.list_jline[i];
		if( 	( obj_jline.gmap_frame_id	 == gmap_frame_id )
			&& 	( obj_jline.gmap_obj_id		 == gmap_obj_id	)
			&& 	( !line_user_id || obj_jline.jline_user_id == line_user_id )
			&&	( !line_type_id || obj_jline.jline_type_id == line_type_id )
			&&	( !line_uniq_id || obj_jline.jline_uniq_id == line_uniq_id )
		){
			// lat,lng
			for( var j = 0; j < obj_jline.getPointNum(); j++ ){
				if( bound == null ){
					bound = new gFrame.GLatLngBounds( obj_jline.getPoint(j), obj_jline.getPoint(j) );
				}else{
					bound.extend( obj_jline.getPoint(j) );
				}
			}
		}
	}

	return bound;
}

JMap2.prototype.moveToBound = function( gmap_frame_id, gmap_obj_id, bound )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	if( bound ){
		var obj_gmap = this.getGMapObj( gmap_frame_id, gmap_obj_id );

		var zoomLevel = obj_gmap.getBoundsZoomLevel(bound);
		if( zoomLevel < obj_gmap.getCurrentMapType().getMinimumResolution() ){
			zoomLevel = obj_gmap.getCurrentMapType().getMinimumResolution();
		}

		obj_gmap.Ext_setCenter( bound.getCenter(), zoomLevel );
	}
}

JMap2.prototype.setCenterCountryBound = function( gmap_frame_id, gmap_obj_id, bound )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var obj_gmap = this.getGMapObj( gmap_frame_id, gmap_obj_id );
	obj_gmap.setCenter( bound.getCenter() );
	var zoomLevel = obj_gmap.getBoundsZoomLevel(bound);
	obj_gmap.setCenter( bound.getCenter(), zoomLevel );
}


//==================================================
//
// 汎用 HTML FACTORY
//
//==================================================
JMap2.prototype.setDefaultHtmlFactory = function( gmap_frame_id )
{
	var gFrame = this.getGMapFrame( gmap_frame_id );

	// ----------------------------------
	// Tick Cls Post sub
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_category_item',		htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_category_base',		htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_pickup_tick_sub',		htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_wnew_tick_sub',		htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_info_tick_sub',		htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_blog_tick_sub',		htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_blog_item_tick_sub',	htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_tour_schedule_tick_sub',	htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_tour_tab_tick_sub',	htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_bus_item',			htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_acomo_tick_sub',		htmlFactory_default );

	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_bbs_base_tick_sub',	htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'marker_red_s',		'factory_post_bbs_item_tick_sub',	htmlFactory_default );

	// ----------------------------------
	// Hover
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_default',			htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_category_item_json',	htmlFactory_hover_category_item_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_category_base_json',	htmlFactory_hover_category_base_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_pickup',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_pickup_tick_main_json',	htmlFactory_hover_pickup_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_pickup_tick_sub_json',	htmlFactory_hover_pickup_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_wnew',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_wnew_tick_main_json',	htmlFactory_hover_wnew_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_wnew_tick_sub_json',		htmlFactory_hover_wnew_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_info',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_info_tick_main_json',	htmlFactory_hover_info_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_info_tick_sub_json',		htmlFactory_hover_info_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_blog',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_blog_tick_main_json',	htmlFactory_hover_blog_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_blog_tick_sub_json',		htmlFactory_hover_blog_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_blog_item',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_blog_item_tick_main_json',	htmlFactory_hover_blog_item_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_blog_item_tick_sub_json',	htmlFactory_hover_blog_item_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_tour_schedule',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_tour_schedule_tick_main_json',	htmlFactory_hover_tour_schedule_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_tour_schedule_tick_sub_json',	htmlFactory_hover_tour_schedule_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_tour_tab',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_tour_tab_tick_main_json',	htmlFactory_hover_tour_tab_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_tour_tab_tick_sub_json',		htmlFactory_hover_tour_tab_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bus_item_json',	htmlFactory_hover_bus_item_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_acomo',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_acomo_tick_main_json',	htmlFactory_hover_acomo_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_acomo_tick_sub_json',	htmlFactory_hover_acomo_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bbs_base',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bbs_base_tick_main_json',	htmlFactory_hover_bbs_base_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bbs_base_tick_sub_json',		htmlFactory_hover_bbs_base_tick_sub_json );

	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bbs_item',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bbs_item_tick_main_json',	htmlFactory_hover_bbs_item_tick_main_json );
	gFrame.createMarkerHtmlFactory( 'hover_default',	'factory_hover_bbs_item_tick_sub_json',		htmlFactory_hover_bbs_item_tick_sub_json );

	// ----------------------------------
	// INFOWIN
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_default',					htmlFactory_default );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_default_title_detail',		htmlFactory_default_title_detail );

	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_pickup_title',		htmlFactory_infowin_pickup_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_wnew_title',		htmlFactory_infowin_wnew_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_info_title',		htmlFactory_infowin_info_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_blog_title',		htmlFactory_infowin_blog_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_blog_item_title',	htmlFactory_infowin_blog_item_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_tour_schedule_title',	htmlFactory_infowin_tour_schedule_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_tour_tab_title',		htmlFactory_infowin_tour_tab_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_acomo_title',		htmlFactory_infowin_acomo_title_json );
	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_acomo_detail',		htmlFactory_infowin_acomo_detail_json );

	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_bbs_base_title',	htmlFactory_infowin_bbs_base_title_json );

	gFrame.createMarkerHtmlFactory( 'infowin_scroll',	'factory_infowin_bbs_item_title',	htmlFactory_infowin_bbs_item_title_json );

}

function htmlFactory_default( args )
{
	var mes = args.shift();
	return mes;
}
function htmlFactory_default_title_detail( args )
{
	var data = args.shift();

	var html = '';

	html += "<b><a href='" + data['url_item'] + "' target=_top>" + data['title'] + '</a></b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// --------------------------------------------------------
// category
// --------------------------------------------------------

// base hover
function htmlFactory_hover_category_base_json( args )
{
	var data = args.shift();

	var html = '';

	if( data['bool_url'] ){
		html += "<a href='" + data['link_url'] + "' target=_top>" + data['title'] + "</a>";
	}else{
		html += data['title'];
	}
	return html;
}

// item hover
function htmlFactory_hover_category_item_json( args )
{
	var data = args.shift();

	var html = '';

	if( data['bool_url'] ){
		html += "<a href='" + data['link_url'] + "' target=_top>" + data['title'] + "</a>";
	}else{
		html += data['title'];
	}
	return html;
}

// --------------------------------------------------------
// pickup
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_pickup_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += "<b>" + data['day'] + ': </b>';
	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_pickup_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['day'] + " <b>PICKUP</b><BR>";
	html += data['title'];

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<a href='" + data['url_item'] +  "' target=_top>詳細記事へ</a>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_pickup_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// wnew
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_wnew_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += "<b>" + data['day'] + ': </b>';
	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_wnew_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['day'] + " <b>What's NEW</b><BR>";
	html += data['title'];

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<a href='" + data['url_item'] +  "' target=_top>詳細記事へ</a>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_wnew_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// info
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_info_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += "<b>" + data['day'] + ': </b>';
	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_info_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['day'] + " <b>お知らせ</b><BR>";
	html += data['title'];

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<a href='http://info.pitt-travel.com.au/plog/view/id-" + data['rec_id'] + "' target=_top>詳細記事へ</a>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_info_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// blog
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_blog_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['subtitle'];
	return html;
}

// tick_main
function htmlFactory_hover_blog_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['title'];

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<a href='http://blog.pitt-travel.com.au/" + data['user_id'] + "/' target=_top>詳細記事へ</a>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_blog_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// blog_item
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_blog_item_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += "<b>" + data['day'] + ': </b>';
	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_blog_item_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['day'] + " <b>BLOG</b><BR>";
	html += data['title'];

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<a href='" + data['url_item'] +  "' target=_top>詳細記事へ</a>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_blog_item_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// tour_schedule
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_tour_schedule_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += '<b>' + data['type_schedule'];
	if( data['bool_disp_title_time'] ){
		html += '：' + data['title_time'];
	}
	html += '</b>';

	if( data['bool_disp_title'] ){
		html += '<BR>' + data['title'];
	}

	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_tour_schedule_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	if( data['bool_disp_tour_title'] ){
		html += '<b><font color=#ff3333>' + data['tour_title'] + '</font></b><BR>';
	}

	html += '<b>' + data['type_schedule'];
	if( data['bool_disp_title_time'] ){
		html += '：' + data['title_time'];
	}
	html += '</b><BR>';

	if( data['bool_disp_title'] ){
		html += data['title'] + '<BR>';
	}

	if( data['bool_link'] ){
		html += "<div><a href='" + data['url_item'] +  "' target=_top>ツアー記事へ</a></div>";
		html += "<div><a href=\"javascript:parent.obj_jsonJMemo.post('tour_base', '" + data['tour_id'] + "');\">メモに入れる</a></div>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_tour_schedule_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// tour_tab
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_tour_tab_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_tour_tab_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['title'];

	return html;
}

// tick_sub
function htmlFactory_hover_tour_tab_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// bus_item
// --------------------------------------------------------
function htmlFactory_hover_bus_item_json( args )
{
	var data = args.shift();

	var html = '';
	html += data['title'];
	return html;
}

// --------------------------------------------------------
// acomo
// --------------------------------------------------------
// infowin
function htmlFactory_infowin_acomo_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += '<b><font color=#666600>' + data['title'] + '</font></b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}
function htmlFactory_infowin_acomo_detail_json( args )
{
	var data = args.shift();

	var html = '';

	if( data['bool_area_city'] ){
		html += '<b>都市：</b>';
		for( var i = 0; i < data['list_city'].length; i++ ){
			html += data['list_city'][i]['name'];
			html += ' ';
		}
		html += '<p></p>';
	}

	html += '<b>部屋：</b>';
	html += '<table>';
	for( var i = 0; i < data['loop_fee'].length; i++ ){
		var roomData = data['loop_fee'][i];
		if( roomData['bool_fee'] ){
			html += '<tr>';

			html += '<td nowrap>' + roomData['type_fee_str'] + '</td>';
			html += '<td nowrap>大人：</td>';
			html += '<td nowrap>A$' + roomData['fee_adult_str'] + '</td>';

			if( roomData['bool_fee_child'] ){
				html += '<td nowrap>子供：</td>';
				html += '<td nowrap>A$' + roomData['fee_child_str'] + '</td>';
			}

			html += '</tr>';
		}
	}
	html += '</table>';

	html += '<p></p>';

	html += '<b>料金適用期間：</b><BR>';
	html += data['day_price_from_year'] + '年' + data['day_price_from_month'] + '月' + data['day_price_from_day'] + '日から<BR>';
	html += data['day_price_to_year'] + '年' + data['day_price_to_month'] + '月' + data['day_price_to_day'] + '日まで';

	html += '<p></p>';

	if( data['imgtag'] ){
		html += data['imgtag'];
	}

	return html;
}

// tick_main
function htmlFactory_hover_acomo_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += '<b>タイプ：</b>' + data['type_acomo_str'] + "<BR>";
	html += '<b><font color=#666600>' + data['title'] + '</font></b>';

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<div><a href='http://acomo.pitt-travel.com.au/plog/view/id-" + data['rec_id'] + "' target=_top>詳細記事へ</a></div>";
		html += "<div><a href=\"javascript:parent.obj_jsonJMemo.post('acomo_base', '" + data['rec_id'] + "');\">メモに入れる</a></div>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_acomo_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

// --------------------------------------------------------
// bbs_base
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_bbs_base_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_bbs_base_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += "<b>フォーラム</b><BR>";
	html += '<b>' + data['title'] + '</b>';

	if( data['bool_link'] ){
		html += '<BR>';
		html += "<a href='" + data['url_item'] +  "' target=_top>フォーラムへ</a>";
	}

	return html;
}

// tick_sub
function htmlFactory_hover_bbs_base_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}


// --------------------------------------------------------
// bbs_base
// --------------------------------------------------------

// infowin
function htmlFactory_infowin_bbs_item_title_json( args )
{
	var data = args.shift();

	var html = '';

	html += '<b>' + data['title'] + '</b>';
	html += "<hr>";
	html += data['detail'];
	return html;
}

// tick_main
function htmlFactory_hover_bbs_item_tick_main_json( args )
{
	var data = args.shift();

	var html = '';
	html += '<b>' + data['title'] + '</b>';

	return html;
}

// tick_sub
function htmlFactory_hover_bbs_item_tick_sub_json( args )
{
	var data = args.shift();

	var html = '';

	html += data['title'];

	if( data['imgtag'] ){
		html += '<BR>';
		html += data['imgtag'];
	}

	return html;
}

//==================================================
//
// JMarker Constructer Lib
//
//==================================================

// Post_Cls_Ticker_Main
JMap2.prototype.construct_Post_Cls_Ticker_Main = function( gmap_frame_id, gmap_obj_id, opts )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame = this.getGMapFrame( gmap_frame_id );

	var obj_jmarker = this.construct_JMarker( gmap_frame_id, gmap_obj_id, opts );

	// ticker
	this.getTicker().addType( opts.marker_type_id, obj_jmarker, gmap_frame_id, gmap_obj_id );
	this.getTicker().initTicker( opts.marker_type_id, opts.bool_overlay );

	return obj_jmarker;
}

// Post_Cls_Ticker_Sub
JMap2.prototype.construct_Post_Cls_Ticker_Sub = function( gmap_frame_id, gmap_obj_id, opts )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame = this.getGMapFrame( gmap_frame_id );

	var obj_jmarker = this.construct_JMarker( gmap_frame_id, gmap_obj_id, opts );

	// info marker をクリックした際、線を描く
	if( this.getLiner() ){
		obj_jmarker.setTrigger('click', gFrame.GEvent.callbackArgs(this.getLiner(), this.getLiner().onClick_JInfoMarker, obj_jmarker.obj_marker) );
	}

	this.getTicker().addType( opts.marker_type_id + '_' + opts.marker_uniq_id, obj_jmarker, gmap_frame_id, gmap_obj_id );
	this.getTicker().initTicker( opts.marker_type_id + '_' + opts.marker_uniq_id, opts.bool_overlay );

	return obj_jmarker;
}

// JMarker
JMap2.prototype.construct_JMarker = function( gmap_frame_id, gmap_obj_id, opts )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame = this.getGMapFrame( gmap_frame_id );

	// Basic
	var point			= opts.point ? opts.point : gFrame.getHideLatLngPoint();
	var marker_user_id	= opts.marker_user_id;
	var marker_type_id	= opts.marker_type_id;
	var marker_uniq_id	= opts.marker_uniq_id;

	// 既に存在するなら、再設定しない
	var obj_jmarker = this.getJMarker( gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id );

	if( obj_jmarker == null ){

		// jmarker Opts
		var obj_jmarkerOpts = new gFrame.JMarkerOpts( point, opts.type_jmarker );

		// Bool
		obj_jmarkerOpts.setBoolDraggable( opts.bool_draggable );
		obj_jmarkerOpts.setBoolDblClickZoom( opts.bool_dblClickZoom );
		obj_jmarkerOpts.setBoolShiftZoom( opts.bool_shiftZoom );
		obj_jmarkerOpts.setBoolClickable( opts.bool_clickable );

		// bool_url
		obj_jmarkerOpts.setBoolUrl( opts.bool_url );
		obj_jmarkerOpts.setLinkUrl( opts.link_url );

		// Hover
		if( opts.bool_hover ){
			obj_jmarkerOpts.setObjHoverHtml( new gFrame.HoverHtml(	opts.hover_factory_id,
																	opts.bool_hover_closer,
																	opts.hover_color_border ? opts.hover_color_border : '#cc0000',
																	opts.hover_color_inner ? opts.hover_color_inner : '#ffffdd',
																	opts.bool_hover_json ? opts.hover_data_json : opts.hover_title
																 )
										   );
		}

		// Icon
		if( opts.type_jmarker == 'icon' ){

			obj_jmarkerOpts.setTypeJIcon( opts.type_jicon );
			obj_jmarkerOpts.setInfoWinMaxWidth( opts.infoWinMaxWidth ? opts.infoWinMaxWidth : 240 );

			if( opts.bool_infowin ){
				for( var i = 0; i < opts.list_infowin.length; i++ ){
					var opts_infowin = opts.list_infowin[i];
					obj_jmarkerOpts.addInfoWinHtmlObjList( new gFrame.InfoWinHtml(	opts_infowin.factory_id,
																					opts_infowin.title,
																					opts_infowin.maxWidth ? opts_infowin.maxWidth : 250,
																					opts_infowin.maxHeight ? opts_infowin.maxHeight : 80,
																					opts_infowin.bool_json ? opts_infowin.data_json : opts_infowin.detail
																				 )
														 );
				}
			}
		}

		// Info
		if( opts.type_jmarker == 'info' ){
			var type_ar	= opts.type_ar ? opts.type_ar : 'down';

			obj_jmarkerOpts.setTypeArrow( type_ar );
			obj_jmarkerOpts.setObjMarkerHtml( new gFrame.MarkerHtml(opts.factory_id, 	// factory
																	opts.bool_closer,	// bool_closer
																	type_ar,			// type_ar
																	opts.marker_title	// arg0
																	)
											);
		}

		obj_jmarker = this.addJMarker( obj_jmarkerOpts, gmap_frame_id, gmap_obj_id, marker_user_id, marker_type_id, marker_uniq_id);

		if( opts.bool_overlay ){
			obj_jmarker.addOverlay();
		}

		if( opts.bool_hover ){
			obj_jmarker.setTrigger( 'mouseover', gFrame.GEvent.callbackArgs( this, this.hideHoverAll, gmap_frame_id, gmap_obj_id ) );
			obj_jmarker.startEvent( 'mouseover' );
		}

	}else{
		obj_jmarker.show();
	}

	return obj_jmarker;
}

//==================================================
//
// JLine Constructer Lib
//
//==================================================
JMap2.prototype.construct_JLine = function( gmap_frame_id, gmap_obj_id, opts )
{
	if( !this.boolReadyMap(gmap_frame_id, gmap_obj_id) ){ return; }

	var gFrame = this.getGMapFrame( gmap_frame_id );

	var jline_user_id	= opts.jline_user_id;
	var jline_type_id	= opts.jline_type_id;
	var jline_uniq_id	= opts.jline_uniq_id;

	var obj_jline = this.addJLine( opts, gmap_frame_id, gmap_obj_id, jline_user_id, jline_type_id, jline_uniq_id );

	if( opts.bool_overlay ){
		obj_jline.addOverlay();
	}

	return obj_jline;
}

// ------------------------------------------------------
// Base Area Tick Small Tick
// ------------------------------------------------------
JMap2.prototype.setClsTick_basearea = function( divName_basearea, pox_x, pos_y )
{
	var div_basearea = xGetElementById( divName_basearea );

	if( div_basearea ){

		var div_tick	 = xCreateDiv();

		div_tick.style.position = 'absolute';

		setDivSizeWH( div_tick, 12, 20 );
		setDivPosXY( div_tick, pox_x - 5, pos_y - 20 );

		xInnerHtml(div_tick, "<img src='/img_gmap/icon/cls_tick_basearea.gif' width=12 height=20>");

		div_basearea.appendChild( div_tick );
	}
}

// -----------------------------------------------------------------------------------
var obj_jmap2 = new JMap2();
obj_jmap2.setGMapFrame( 'main', window );

