//================================================================
//○初期化
//================================================================
$( document ).ready( function() {
	Zg.prototype.start();
} );
//================================================================
//□Zg
//================================================================
var Zg = function() {
};
//================================================================
//□共通定数
//================================================================
Zg.c = {
	ID_GMAP      : '#accessMap' , //GoogleMaps設置ID
	INI_POSITION : [34.3828309,132.4547927,16] , //初期マップ位置
	//★学校情報
	SCHOOLS      : [
//		[34.3826865,132.4539067,'学校法人 上野学園','広島外語専門学校'        ,'〒730-0052 ','広島市中区千田町1-3-12'  ,'TEL：082-241-8900'],
		[34.3828309,132.4547927,'学校法人 上野学園','広島会計学院電子専門学校','〒730-0052 ','広島市中区千田町1-2-26'  ,'TEL：082-541-1800']
//		[34.3833837,132.4554594,'学校法人 上野学園','広島ビジネス専門学校'    ,'〒730-0042 ','広島市中区国泰寺町2-5-23','TEL：082-245-3900'],
	],
	//★経路情報
	ROUTES       : [
		['JR広島駅',[
				[34.396216,132.475247],
				[34.394764,132.476062],
				[34.393843,132.476255],
				[34.392621,132.471771],
				[34.393188,132.466857],
				[34.393630,132.463810],
				[34.395277,132.457609],
				[34.383821,132.453746],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p>●路面電車（広島電鉄）…所要時間約25分<br />路面番号&#9312;の「広島港（宇品）」行き「鷹野橋（たかのばし）」下車<br />※路面番号&#9316;の「広島港（宇品）」行きには乗らないでください。</p><p>●バス（広島バス）…所要時間約15分<br />路線番号21-1の「紙屋町経由広島港」行き「南鷹の橋」下車</p></div>'
		],
		['JR横川駅'  ,[
				[34.409423,132.450463],
				[34.40459,132.449369],
				[34.397384,132.44703],
				[34.395313,132.45763],
				[34.384706,132.454025],
				[34.383573,132.453821],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p>●路面電車（広島電鉄）…所要時間約22分<br />路線番号&#9318;の「広電本社前」行き「鷹野橋」下車</p></div>'
		],
		['JR西広島駅',[
				[34.397809,132.427954],
				[34.396835,132.429628],
				[34.394374,132.435185],
				[34.393967,132.437353],
				[34.39556,132.438147],
				[34.394055,132.446236],
				[34.397313,132.446966],
				[34.39533,132.457652],
				[34.383657,132.453773],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p>●路面電車（広島電鉄）…所要時間約30分<br />路面番号&#9314;の「広島港（宇品）」行き「鷹野橋」下車</p><p>●バス（広電バス）…所要時間約20分<br />路線番号10の「大学病院経由旭町」行き「大手町四丁目」下車</p></div>'
		],
		['宇品港'  ,[
				[34.352657,132.455538],
				[34.352320,132.456922],
				[34.354101,132.457705],
				[34.353888,132.462930],
				[34.355535,132.462973],
				[34.357466,132.463703],
				[34.368732,132.464776],
				[34.374045,132.464518],
				[34.374063,132.464561],
				[34.375046,132.460108],
				[34.375094,132.459985],
				[34.381465,132.455436],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p>●路面電車（広島電鉄）…所要時間約20分<br />路線番号&#9312;の「広島駅」行き又は&#9314;の「広電西広島（己斐）」行「鷹野橋」下車<br />※路線番号&#9316;の「広島駅」行きには乗らないでください。</p><p>●バス（広島バス）…所要時間約17分<br />路線番号21-1の「広島駅」行き又は「広島駅・向洋」行き「南鷹の橋」下車</p></div>'
		],
		['広島バスセンター',[
				[34.395773,132.457104],
				[34.395127,132.457609],
				[34.383608,132.453714],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p>●路面電車（広島電鉄）…所要時間約8分<br />そごうデパート前の「紙屋町西」電停から路線番号&#9314;の「広島港（宇品）」行き<br />または&#9318;の「広電本社前」行き「鷹野橋」下車</p><p>●徒歩なら約20分</p></div>'
		],
		['広島西風新都IC',[
				[34.470052,132.38594],
				[34.469592,132.384138],
				[34.465806,132.383151],
				[34.463011,132.377786],
				[34.454766,132.37564],
				[34.45335,132.380962],
				[34.445494,132.380619],
				[34.445777,132.399244],
				[34.443158,132.401561],
				[34.441672,132.405166],
				[34.426027,132.418899],
				[34.418097,132.430915],
				[34.408963,132.432117],
				[34.404006,132.437181],
				[34.402448,132.441644],
				[34.400571,132.453575],
				[34.399155,132.458982],
				[34.383927,132.453811],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p></p></div>'
		],
		['広島IC',[
				[34.460357,132.479581],
				[34.441742,132.474431],
				[34.433036,132.469196],
				[34.427584,132.470054],
				[34.420929,132.464904],
				[34.409034,132.462072],
				[34.406059,132.45881],
				[34.399827,132.45675],
				[34.399208,132.459025],
				[34.3846,132.45409],
				[34.383475,132.453693],
				[34.38286,132.454422],
				[34.382902,132.454712]
			],
			'<div class="Item ReadBox"><p></p></div>'
		]
	],
	DUMMY_END    : 0
};
//================================================================
//□共通オブジェクト
//================================================================
Zg.p = {
	gMap          : null , //GoogleMapオブジェクト
	gScMarkersNow : [] , //学校マーカー：表示用
	gScMarkersOld : [] , //学校マーカー：削除用
	gScEventsOld  : [] , //学校イベント：削除用
	gRtLinesNow   : [] , //経路ライン：表示用
	gRtLinesOld   : [] , //経路ライン：削除用
	gRtMarkersNow : [] , //経路マーカー：表示用
	gRtMarkersOld : [] , //経路マーカー：削除用
	gRtEventsOld  : [] , //経路イベント：削除用
	DUMMY_END     : 0    //
};
//================================================================
//○初期処理
//================================================================
Zg.prototype.start = function() {
	if ( $( Zg.c.ID_GMAP ).get(0) != null ) {
		//□Google AJAX APIロード
		google.load( 'maps' , '2' , { 'callback' : function() {
			window.unload = google.maps.Unload;
			//◆Google Mapsが利用できるブラウザかどうか判断
			if ( google.maps.BrowserIsCompatible() ) {
				//◇利用可能
				//□地図のインスタンスを作成
				Zg.p.gMap = new google.maps.Map2( $( Zg.c.ID_GMAP ).get(0) , google.maps.NORMAL_MAP );
				//□キーボードで操作
				new google.maps.KeyboardHandler( Zg.p.gMap );
				//□移動/縮尺ボタンをつける
				Zg.p.gMap.addControl(
					new google.maps.LargeMapControl() ,
					new google.maps.ControlPosition( google.maps.ANCHOR_TOP_LEFT , new google.maps.Size( 5 , 32 ) )
				);
				//□地図/衛星写真 切り替え
				Zg.p.gMap.addControl(
					new google.maps.MenuMapTypeControl( true , false ) ,
					new google.maps.ControlPosition( google.maps.ANCHOR_TOP_LEFT , new google.maps.Size( 5 , 5  ) )
				);
				Zg.p.gMap.addMapType( google.maps.PHYSICAL_MAP );
				//□初期表示位置を設定
				Zg.p.gMap.setCenter( new google.maps.LatLng( Zg.c.INI_POSITION[0] , Zg.c.INI_POSITION[1] ) , Zg.c.INI_POSITION[2] );
				//□ズームイン時にスムーズ
				Zg.p.gMap.enableContinuousZoom();
				//□ダブルクリック時にズームイン
				Zg.p.gMap.enableDoubleClickZoom();
				//□マウススクロール時にズームイン・ズームアウト
				Zg.p.gMap.enableScrollWheelZoom();
				GEvent.addDomListener( $( Zg.c.ID_GMAP ).get(0) , 'DOMMouseScroll' , Zg.prototype.mouseScrollCancelEvent );
				GEvent.addDomListener( $( Zg.c.ID_GMAP ).get(0) , 'mousewheel'     , Zg.prototype.mouseScrollCancelEvent );
				
				//□学校のポイント
				Zg.prototype.pointSchools();
			}
		}});
	}
};
//================================================================
//○マウススクロールキャンセルイベント
//================================================================
Zg.prototype.mouseScrollCancelEvent = function( e ) {
	if (typeof e.preventDefault  == 'function') {
		e.preventDefault();
	}
	if (typeof e.stopPropagation == 'function') {
		e.stopPropagation();
	}
	if ( window.event ) {
		window.event.cancelBubble	= true;
		window.event.returnValue	= false;
	}
};
//================================================================
//○学校の描画
//================================================================
Zg.prototype.pointSchools = function() {
	//□初期化
//>>update 16:43 2009/03/31 eyemovic.abe
	Zg.p.gMap.clearOverlays();
	Zg.p.gScMarkersOld = Zg.p.gScMarkersNow;
	for ( i = 0; i < Zg.p.gScEventsOld.length; i++ ) {
		GEvent.removeListener( Zg.p.gScEventsOld[i] );
	}
	Zg.p.gScMarkersNow = new Array();
	Zg.p.gScEventsOld  = new Array();
	
	//□マーカーの設置（学校）
	for ( i = 0; i < Zg.c.SCHOOLS.length; i++ ) {
		Zg.prototype.makeMarkerSchool( Zg.c.SCHOOLS[i] );
	}

	//□旧情報削除
	for ( i = 0; i < Zg.p.gScMarkersOld.length; i++ ) {
		Zg.p.gMap.removeOverlay( Zg.p.gScMarkersOld[i] );
	}
	Zg.p.gScMarkersOld = new Array();
//<<update 16:43 2009/03/31 eyemovic.abe
//>>insert 13:53 2009/03/31 eyemovic.abe
	//□インフォウィンドウ初期表示
	Zg.p.gMap.panTo( Zg.p.gScMarkersNow[0].getLatLng() );
	Zg.p.gScMarkersNow[0].openInfoWindowHtml( Zg.p.gScMarkersNow[0]['html'] );
//<<insert 13:53 2009/03/31 eyemovic.abe
};
//================================================================
//○経路の描画
//================================================================
Zg.prototype.pointRoutes = function( index ) {
	//□初期化
//>>update 16:43 2009/03/31 eyemovic.abe
	Zg.p.gRtLinesOld   = Zg.p.gRtLinesNow;
	Zg.p.gRtMarkersOld = Zg.p.gRtMarkersNow;
	for ( i = 0; i < Zg.p.gRtEventsOld.length; i++ ) {
		GEvent.removeListener( Zg.p.gRtEventsOld[i] );
	}
	Zg.p.gRtLinesNow   = new Array();
	Zg.p.gRtMarkersNow = new Array();
	Zg.p.gRtEventsOld  = new Array();
	
	//□ルートの描画
	Zg.prototype.makePolylineRoute( Zg.c.ROUTES[index] );
	
	//□旧情報削除
	for ( i = 0; i < Zg.p.gRtLinesOld.length; i++ ) {
		Zg.p.gMap.removeOverlay( Zg.p.gRtLinesOld[i] );
	}
	for ( i = 0; i < Zg.p.gRtMarkersOld.length; i++ ) {
		Zg.p.gMap.removeOverlay( Zg.p.gRtMarkersOld[i] );
	}
	Zg.p.gRtLinesOld   = new Array();
	Zg.p.gRtMarkersOld = new Array();
//<<update 16:43 2009/03/31 eyemovic.abe
//>>insert 13:53 2009/03/31 eyemovic.abe
	//□インフォウィンドウ初期表示
	Zg.p.gMap.panTo( Zg.p.gScMarkersNow[0].getLatLng() );
	Zg.p.gScMarkersNow[0].openInfoWindowHtml( Zg.p.gScMarkersNow[0]['html'] );
//<<insert 13:53 2009/03/31 eyemovic.abe
};
//================================================================
//○マーカーの設置（学校）
//================================================================
Zg.prototype.makeMarkerSchool = function( school ) {
	var marker = new google.maps.Marker( new google.maps.LatLng( school[0] , school[1] ) );
		marker['html'] = this.makeInfowindowSchool( school );
	
	//□クリック時にインフォウィンドウを開くイベントを追加
	var click = google.maps.Event.addListener( marker, 'click', function(){
		marker.openInfoWindowHtml( marker['html'] );
	});
	
	//□イベントを削除用に格納
	Zg.p.gScEventsOld.push ( click  );
	Zg.p.gScMarkersNow.push( marker );
	Zg.p.gMap.addOverlay   ( marker );
};
//================================================================
//○マーカーの設置（経路）
//================================================================
Zg.prototype.makeMarkerRoute = function( route ) {
	var marker = new google.maps.Marker( new google.maps.LatLng( route[1][0][0] , route[1][0][1] ) );
		marker['html'] = this.makeInfowindowRoute( route );
	
	//□クリック時にインフォウィンドウを開くイベントを追加
	var click = google.maps.Event.addListener( marker, 'click', function(){
		marker.openInfoWindowHtml( marker['html'] );
	});
	
	//□イベントを削除用に格納
	Zg.p.gRtEventsOld.push ( click  );
	Zg.p.gRtMarkersNow.push( marker );
	Zg.p.gMap.addOverlay   ( marker );
};
//================================================================
//○ルートの描画
//================================================================
Zg.prototype.makePolylineRoute = function( route ) {
	//□ポイントの生成
	var points   = new Array();
	var pointSum = [0,0];
//>>update 16:43 2009/03/31 eyemovic.abe
	for ( i = 0; i < route[1].length; i++ ) {
		points.push( new GLatLng( route[1][i][0] , route[1][i][1] ) );
		pointSum[0] += route[1][i][0];
		pointSum[1] += route[1][i][1];
	}
//<<update 16:43 2009/03/31 eyemovic.abe
	
	//□マーカーの設置（学校）
	Zg.prototype.makeMarkerRoute( route );
	
	//□ポリラインの生成
	var polyline = new GPolyline( points , "#ff0000" , 10 , 0.7 );
	
	Zg.p.gRtLinesNow.push( polyline );
	Zg.p.gMap.addOverlay ( polyline );
	
	//□初期表示位置を設定
	Zg.p.gMap.setZoom( 12 );
	Zg.p.gMap.panTo( new google.maps.LatLng( pointSum[0] / route[1].length , pointSum[1] / route[1].length ) );
	
	//□経路情報
	$( '#accessText' ).html( route[2] );
};
//================================================================
//○情報ウィンドウの内容を作成
//================================================================
Zg.prototype.makeInfowindowSchool = function( shcool ) {
	var html    = [];
	
	html.push( '<div> '  );
	html.push( '<p>'     );
	html.push( shcool[2] );
	html.push( shcool[3] );
	html.push( '</p>'    );
	html.push( '<p>'     );
	html.push( shcool[4] );
	html.push( shcool[5] );
	html.push( '</p>'    );
	html.push( '<p>'     );
	html.push( shcool[6] );
	html.push( '</p>'    );
	html.push( '</div>'  );

	return html.join( '' );
};
//================================================================
//○情報ウィンドウの内容を作成（経路）
//================================================================
Zg.prototype.makeInfowindowRoute = function( route ) {
	var html    = [];
	
	html.push( '<div> '  );
	html.push( '<p>'     );
	html.push( route[0] );
	html.push( '</p>'    );
	html.push( '</div>'  );

	return html.join( '' );
};
