//--------------------------------------------------------------------------------------------------
// KsGMap - ポリライン　プラグイン　　Ver1.10
// Copyright(c) 2005-2006 Ksc    http://www.ksgmap.jp/
//--------------------------------------------------------------------------------------------------

//プラグインを登録（プラグイン名 , バージョン , 本体動作バージョン）
KsGMapEX.addPlugIn( "Polyline" , 1.10 , 1.10 );
//グローバル関数定義
//ポリライン・プラグイン定義
var KsGMapPlugIn_Polyline = new function(){
	this.condition					= {};
	this.condition.resident			= "";
	this.condition.category 		= {};

	this.polylineData				= {};
	this.polylineObject				= {};
	this.polylineObject.resident	= {};
	this.polylineObject.category	= {};

	this.importXML					= KsGMapPlugIn_Polyline_importXML;
	this.addCondition				= KsGMapPlugIn_Polyline_addCondition;

	this.resident					= KsGMapPlugIn_Polyline_resident;
	this.changeCategory				= KsGMapPlugIn_Polyline_changeCategory;

	this.overlay					= KsGMapPlugIn_Polyline_overlay;
	this.remove						= KsGMapPlugIn_Polyline_remove;
}
//コールバックを追加
KsGMapEX.addCallback( KsGMapInit_finish					, KsGMapPlugIn_Polyline.resident		);		//初期化終了
KsGMapEX.addCallback( KsGMapCategory_callback.change	, KsGMapPlugIn_Polyline.changeCategory	);		//カテゴリ - 変更
KsGMapEX.addCallback( KsGMapDataImportXML				, KsGMapPlugIn_Polyline.importXML		);		//XMLファイルからデータをインポート

//□ポリライン - XMLファイルをインポート（コールバック）
function KsGMapPlugIn_Polyline_importXML( xmlDoc ){
	KsGMapPlugIn_Polyline.polylineData = new Array();

	var temp_xmlData = xmlDoc.documentElement.getElementsByTagName( "polyline" );	//カテゴリタグ
	for( var i = 0 ; i < temp_xmlData.length ; i++ ){	//すべてのデータタグからデータを取得
		var data = KsGMapCommon.XML.convAttributesToArray( temp_xmlData[ i ] );	//属性を配列に入れ替える
		data[ "data" ] = GXml.value( temp_xmlData[ i ] );						//値
		KsGMapPlugIn_Polyline.polylineData[ data[ "id" ] ] = data;
	}
}
//□ポリライン - 条件の追加
function KsGMapPlugIn_Polyline_addCondition( condition , polyline_ids ){
	if( !condition    || condition    == undefined ){ KsGMapCommon.Error.trigger( "設定エラー：ポリラインのIDを指定して下さい。" , "KsGMapPlugIn_Polyline:i001" , 0 );  return; }
	if( !polyline_ids || polyline_ids == undefined ){ KsGMapCommon.Error.trigger( "設定エラー：ポリライン条件を指定して下さい。" , "KsGMapPlugIn_Polyline:i002" , 0 );  return; }

	//引数を整理
	var temp = condition.split( ":" );
	var type = temp[ 0 ];	var key = temp[ 1 ];

	polyline_ids = polyline_ids.replace( /[\s\t]+/g , "," );		//カンマに統一

	//タイプ別に変数に収納
	switch( type ){
		case "resident"	:		//常に表示
			KsGMapPlugIn_Polyline.condition.resident += ( KsGMapPlugIn_Polyline.condition.resident ? "," : "" ) + polyline_ids;
			break;

		case "category"	:		//カテゴリ
			if( KsGMapPlugIn_Polyline.condition.category[ key ] == undefined	){ KsGMapPlugIn_Polyline.condition.category[ key ]  = polyline_ids;			}
			else																 { KsGMapPlugIn_Polyline.condition.category[ key ] += "," + polyline_ids;	}	//追加
			break;

		default :				//以外
			KsGMapCommon.Error.trigger( "設定エラー：ポリライン条件が正しくありません" , "KsGMapPlugIn_Polyline:i003" , 0 );  return;
			break;
	}
}
//□ポリライン - 常駐（初期化終了のコールバック）
function KsGMapPlugIn_Polyline_resident(){
	var polyline_ids = KsGMapPlugIn_Polyline.condition.resident;
	if( !polyline_ids || polyline_ids == undefined ){ return ; }

	KsGMapPlugIn_Polyline.overlay( "resident" , polyline_ids );
}
//□ポリライン - カテゴリの変更（コールバック）
function KsGMapPlugIn_Polyline_changeCategory(){
	if( KsGMapPlugIn_Polyline.polylineObject[ "category" ].length ){ KsGMapPlugIn_Polyline.remove( "category" ); }	//削除

	var polyline_ids = KsGMapPlugIn_Polyline.condition.category[ this.id ];
	if( !polyline_ids || polyline_ids == undefined ){ return ; }

	KsGMapPlugIn_Polyline.overlay( "category" , polyline_ids );
}
//□ポリライン - ポリラインを描く
function KsGMapPlugIn_Polyline_overlay( type , polyline_ids ){

	//複数のIDを分割して、それぞれ描く
	var polyline_id = polyline_ids.split( "," );
	var k = 0;
	for( var j = 0 ; j < polyline_id.length ; j++ ){
		if( !polyline_id[ j ] ){ continue; }
		var polyline_data = this.polylineData[ polyline_id[ j ] ];
		if( !polyline_data ){ KsGMapCommon.Error.trigger( "データエラー：ポリライン（ " + polyline_id[ j ] + " ）が定義されていません。" , "KsGMapPlugIn_Polyline:i004" , 0 );  continue; }

		//ポリラインのポイントの生成
		var points = new Array();
		var temp1 = polyline_data[ "data" ].split( /[\s\t]+/ );
		for( var i = 0 ; i < temp1.length ; i++ ){
			var temp2 = temp1[ i ].split( /,/ );
			var lat = temp2[ 0 ];  var lng = temp2[ 1 ];
			lng = polyline_data[ "prefix_lng" ] + lng;  lat = polyline_data[ "prefix_lat" ] + lat;

			points[ points.length ] = new GPoint( lng , lat );
		}

		//ポリラインの描写
		KsGMapPlugIn_Polyline.polylineObject[ type ][ k ] = new GPolyline( points , polyline_data[ "color" ] , polyline_data[ "weight" ] , polyline_data[ "opacity" ] );
		KsGMapMap.gmap.addOverlay( KsGMapPlugIn_Polyline.polylineObject[ type ][ k ] );
		k++;
	}
}
//□ポリライン - ポリラインを消す
function KsGMapPlugIn_Polyline_remove( type ){
	for( var i = 0 ; i < KsGMapPlugIn_Polyline.polylineObject[ type ].length ; i++ ){
		KsGMapMap.gmap.removeOverlay( KsGMapPlugIn_Polyline.polylineObject[ type ][ i ] );
	}
	KsGMapPlugIn_Polyline.polylineObject[ type ] = new Array();
}
//--------------------------------------------------------------------------------------------------

