﻿var EarthDay = {};
EarthDay.mapObj;
EarthDay.apiObj;

String.prototype.truncate = function(to) {
  var str = this.toString();
  return str.length > to ? str.slice(0, to)+'...' : str;
};

function insertComma(str) {
	var num = new String(str).replace(/,/g, "");
	while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
	return num;
}

$(function(){
	$('#noscript').show();
	$('#menu').css( 'width', '330px' );
	
	// --------------------------------------------------------------------------
	// 初期状態でつけられるイベントは全てここで設定
	// --------------------------------------------------------------------------
	( function(){
		// --------------------------------------------------------------------------
		// 初回来訪時にはようこそページを表示
		// --------------------------------------------------------------------------
		if ( !document.cookie.match('greenpowermap=index') ) {
			$('#popBg, #popWindow, #boxFirst').show();
		}
		document.cookie = 'greenpowermap=index; expires=' + new Date(2030, 1).toUTCString();
		
		// --------------------------------------------------------------------------
		// ヘッダーのメニュー部分
		// --------------------------------------------------------------------------
		// グリーン電力とは、導入企業、証明書発行機関のアイコン
		$('#menu li:not(.btnReset)').click(function(e){
			e.preventDefault();
			
			// 企業もしくは機関情報を取得し表示
			var className = $(this).attr('class');
			EarthDay.apiObj.getList( className );
			
			// ライトボックスの表示制御
			$('.lightbox').hide();
			$('#popBg, #popWindow').show()
				.find( '#'+$(this).attr('class') ).show();
		});
		// 初期状態に戻すボタン
		$('#menu li.btnReset').click(function(e){
			e.preventDefault();
			
			// MAPを初期状態に戻す
			EarthDay.mapObj.resetMarker();
			
			$(this).hide();
			$('#infoBox .box').hide();
			
			$('#menu').css( 'width', '330px' );
			
			$('.condition_id').attr( 'id', '' );
			$('.condition_type').attr( 'id', '' );
			
		});
		
		
		// --------------------------------------------------------------------------
		// エネルギーの種類選択部分
		// --------------------------------------------------------------------------
		// エネルギーアイコンクリック時
		$('#energie .hoverArea a.energy_type').click(function(e){
			e.preventDefault();
			
			$('#menu .btnReset').show();
			$('#menu').css( 'width', '460px' );
			
			// TODO 各エネルギーで絞込み
			var energyType = $(this).parents('.hoverArea').find('.popBox').attr('id');
			//if ( energyType == 'Water' || energyType == 'Sun' ) return;
			
			EarthDay.mapObj.map.clearOverlays();
			EarthDay.apiObj.findEnergy( energyType );
			
		});
		// エネルギーアイコン上をマウスオーバー時
		$('#energie .hoverArea').unbind().hover(
			function(){
				$(this).find('.popBox').show();
			},
			function(){
				$(this).find('.popBox').hide();
			}
		);
		// エネルギーの種類選択部分の詳しく見る
		$('#energie .hoverArea .popBox .link .internal').click(function(e){
			e.preventDefault();
			
			// ライトボックスの表示制御
			$('.lightbox').hide();
			var energyType = $(this).parents('.popBox').attr('id');
			$('#popBg, #popWindow').show()
				.find('.window[id^=boxAbout'+energyType+']').show();
			
			// 発電所 使用企業 店舗数を出力
			EarthDay.apiObj.replacePlantData( energyType );
			EarthDay.apiObj.replaceCompanyData( energyType );
		});
		
		
		// --------------------------------------------------------------------------
		// ランキング
		// --------------------------------------------------------------------------
		$('#rankList .btn').click(function(e){
			e.preventDefault();
			if ( $('#list').css('display') == 'block' ) {
				$('#list').css('display', 'none');
				$('#rankList').css('width', '100px');
			} else {
				$('#list').css('display', 'block');
				$('#rankList').css('width', '310px');
			}
		});
		$('#rankList .internal').click(function(e){
			e.preventDefault();
			
			// ライトボックスの表示制御
			$('.lightbox').hide();
			$('#popBg, #popWindow, #boxCompany').show();
			
			// 企業一覧の出力
			EarthDay.apiObj.getList( 'boxCompany' );
		});
		$('#list li').find('a').unbind().click(function(e){
			e.preventDefault();
			
			// map上のマーカーを全て削除
			EarthDay.mapObj.map.clearOverlays();
			$('#infoBox .box').hide();
			
			var companyId = $(this).parents('li').attr('id').split('company_')[1];
			EarthDay.apiObj.writeCompanyBaseMapping(companyId);
			
			$('#company')
				.find('.caption p')
					.text( data.company[companyId].company_name + 'のミドリのチカラ' )
					.attr('id', 'company_id_'+companyId)
					.end()
				.find('.txtArea p')
					.html( data.company[companyId].company_outline.truncate(40) )
					.end()
				.show();
			
			$('#menu .btnReset').show();
			$('#menu').css( 'width', '460px' );
		});
		
		// --------------------------------------------------------------------------
		// ～のミドリのチカラ
		// --------------------------------------------------------------------------
		// 表示領域の切り替え
		$('#infoBox .caption span').click(function(e){
			e.preventDefault();
			var baseNode = $(this).parents('.box');
			if ( baseNode.find('.txtArea').css('display') == 'block' ) {
				baseNode.find('div[class!=caption]').hide();
				baseNode.find('img.btn').attr('src', '/img/btn_arrow_b.png');
			} else {
				baseNode.find('div[class!=caption]').show();
				baseNode.find('img.btn').attr('src', '/img/btn_arrow_t.png');
			}
			Sisso.hover( baseNode.find('img.btn').get(0) );
		});
		// 詳しく見る
		$('#infoBox .link').click(function(e){
			e.preventDefault();
			
			$('.lightbox').hide();
			
			var parentsId = $(this).parents('.box').attr('id');
			switch ( parentsId ) {
				case 'company' : 
					var companyId = $('#'+parentsId).find('p[id^="company"]').attr('id').split('company_id_')[1];
					EarthDay.apiObj.getDetailCompany( companyId );
					
					$('#popBg, #popWindow, #boxAboutCompany').show();
					
					break;
				case 'plant' : 
					var plantId = $('#'+parentsId).find('p[id^="plant"]').attr('id').split('plant_id_')[1];
					EarthDay.apiObj.getDetailPlant( plantId );
					
					$('#popBg, #popWindow, #boxAboutPlant').show();
					
					break;
				case 'organization' : 
					var organizationId = $('#'+parentsId).find('p[id^="organization"]').attr('id').split('organization_id_')[1];
					EarthDay.apiObj.getDetailOrganization( organizationId );
					
					$('#popBg, #popWindow, #boxAboutFacility').show();
					
					break;
			}
		});
		
		
		// --------------------------------------------------------------------------
		// スタッフ
		// --------------------------------------------------------------------------
		// ライトボックス表示
		$('#linkArea li:first').click(function(e){
			e.preventDefault();
			
			$('.lightbox').hide();
			$('#popBg, #popWindow, #boxStaff').show();
		});
		
		// --------------------------------------------------------------------------
		// ライトボックス
		// --------------------------------------------------------------------------
		// 閉じるボタン
		$('.button').find('img[src*=btn_close]').click(function(e){
			e.preventDefault();
			lightboxClose();
		});
		
		var lightboxClose = function(){
			$('.lightbox').hide();
		}
	})();
	
	// --------------------------------------------------------------------------
	// google map関連
	// --------------------------------------------------------------------------
	EarthDay.mapObj = new EarthDay.Map();
	
	// --------------------------------------------------------------------------
	// api関連
	// --------------------------------------------------------------------------
	EarthDay.apiObj = new EarthDay.API();
	
	
	
	
	
});

EarthDay.Map = function(){
	if (!GBrowserIsCompatible()) return alert('google mapをご利用頂けるブラウザではございません。\n申し訳御座いませんが、別のブラウザをご利用下さい。');
	
	var self = this;
	self.googlemapMarginHeight = '65';
	
	// google map上に書き出すマーカーの設定
	self.iconType = {
		'plant' : {
			'image'    : {
				1 : '/img/map/map_wind.png',
				2 : '/img/map/map_water.png',
				3 : '/img/map/map_sun.png',
				4 : '/img/map/map_heat.png',
				5 : '/img/map/map_bio.png'
			},
			'size_w'   : 30,
			'size_h'   : 40,
			'anchor_w' : 15,
			'anchor_h' : 40,
			'info_w'   : 30,
			'info_h'   : 10
		},
		'store' : {
			'image'      : {
				1 : '/img/map/sony.png',
				2 : '/img/map/avedalogo.png',
				3 : '/img/map/junlogo.png',
				4 : '/img/map/patagonialogo.png',
				5 : '/img/map/earthdaylogo.png',
				6 : '/img/map/towerlogo.png',
				7 : '/img/map/wacoal.png',
				8 : '/img/map/coleman.png',
				9 : '/img/map/ships.png'
			},
			'size_w'   : 70,
			'size_h'   : 60,
			'anchor_w' : 35,
			'anchor_h' : 60,
			'info_w'   : 70,
			'info_h'   : 5
		}
	}
	
	// google map上に引くラインの設定
	self.energyLineWeight = 4;
	self.energyLineColor = {
		1 : '#3366CC',
		2 : '#66CCFF',
		3 : '#FF9933',
		4 : '#CC3333',
		5 : '#33CC66'
	}
	
	// 絞り込んだ場合にエネルギーIDを格納
	self.mapPressEnergy;
	
	// google map 書き出し
	self.init();
	self.resize();
};
EarthDay.Map.prototype = {
	init : function () {
		var self = this;
		
		self.resize();
		$(window).resize(function(){
			self.resize();
		});
		
		// 地図を書き出すDivIdを指定する
		self.map = new GMap2( $('#map').get(0) );
		
		// GLatLng(経度, 緯度)でコンストラクタを作成
		// setCenterで地図の中心とズーム値を設定する
		// resetMarkerでsetCenterを上書きしているので、ここ修正しても意味ない
		self.map.setCenter( new GLatLng( 39.62, 139.45 ), 5 );
		
		// MapTypeは地図、航空写真、地図+写真
		// LargeMapはボタンで4つのルートにドラッグして、ズームイン/ズームアウト、ズームスライダー
		var mapTypeControlPos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(20, 110));
		self.map.addControl( new GMapTypeControl(), mapTypeControlPos );
		
		// LargeMapControlの表示位置を調整
		var mapControlPos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(20, 140));
		self.map.addControl( new GSmallMapControl(), mapControlPos );
		
		self.map.enableScrollWheelZoom();
		
		self.resetMarker();
		
		$(window).unload(GUnload);
	},
	resize : function () {
		var self = this;
		
		// google map が格納されているdivをウィンドウサイズにリサイズ
		$('#map')
			.css( 'width', $(window).width())
			.css( 'height', parseInt($(window).height()) - parseInt(self.googlemapMarginHeight) );
	},
	createMarker : function ( data, type, markerType ) {
		var self = this;
		
		// マーカーの設定を追加
		var icon = new GIcon();
		icon.image = ( type == 'store' ) ? '/img/map/' + data.store_image : self.iconType[type].image[markerType];
		icon.iconSize         = new GSize( self.iconType[type].size_w, self.iconType[type].size_h );
		if ( type == "plant" ) {
			icon.shadow     = "/img/map/map_shadow.png";
			icon.shadowSize = new GSize(50, 40);
		}
		icon.iconAnchor       = new GPoint( self.iconType[type].anchor_w, self.iconType[type].anchor_h );
		icon.infoWindowAnchor = new GPoint( self.iconType[type].info_w, self.iconType[type].info_h );
		icon.infoShadowAnchor = new GPoint( self.iconType[type].info_w, self.iconType[type].info_h );
		
		markerOptions = { icon:icon };
		var point = new GLatLng( data.lat, data.lon );
		//var point = new GLatLng( 35.658587, 139.745425 );
		var marker = new GMarker(point, markerOptions);
		self.map.addOverlay( marker );
		
		return marker;
	},
	setBaloon : function ( marker, pointData, type ) {
		var self = this;
		
		var idName;
		var showIdName;
		var insertHTML;
		
		if ( type == 'plant' ) {
			idName = 'pointPlant';
			showIdName = '発電所';
			
			insertHTML = ['<div class="'+idName+'">',
								'<h2>'+pointData[type+'_name']+'</h2>',
								'<p class="imgArea"><img src="/img/map/'+pointData[type+'_image']+'" /></p>',
								'<p class="txtArea">'+pointData[type+'_outline'].truncate(40)+'</p>',
								'<p class="link">',
									'<a href="" title="グリーン電力を導入しているお店MAPをみる" class="internal">グリーン電力を導入しているお店MAPをみる</a>',
								'</p>',
							'</div>'];
			
		} else {
			idName = 'pointCompany';
			showIdName = '企業';
			
			//if ( !pointData['adress'] ) pointData['adress'] = '登録されておりません。'
			//if ( !pointData['tel'] ) pointData['tel'] = '登録されておりません。'
			
			var storeImage = pointData[type+'_image'].replace(/.png/, '.jpg');
			
			insertHTML = ['<div class="'+idName+'">',
								'<h2>'+pointData[type+'_name']+'</h2>',
								'<p class="imgArea"><img src="/img/map/'+storeImage+'" /></p>',
								'<p class="txtArea">'+pointData[type+'_outline'].truncate(40)+'</p>',
								'<p class="address">'+pointData['adress']+'</p>',
            					'<p class="tel">'+pointData['tel']+'</p>',
            					'<p class="link">',
									'<a href="" title="グリーン電力を導入している発電所MAPをみる" class="internal">グリーン電力を導入している発電所MAPをみる</a>',
								'</p>',
							'</div>'];
			
		}
		
		var insertObj = $( insertHTML.join('') )
							.find('.internal').unbind().click(function(e){
								e.preventDefault();
								
								EarthDay.mapObj.map.clearOverlays();
								$('#infoBox .box').hide();
								
								if ( type =='plant' ) {
									var plantId = pointData['plant_id']
									EarthDay.apiObj.writePlantBaseMapping( plantId );
									
									$('#plant')
										.find('.caption p')
											.text( data.plant[plantId].plant_name + 'のミドリのチカラ' )
											.attr( 'id', 'plant_id_'+plantId )
											.end()
										.find('.txtArea p')
											.empty().append( data.plant[plantId].plant_outline.truncate(40) )
											.end()
										.show();
									
								} else {
									var companyId = pointData['company_id'];
									EarthDay.apiObj.writeCompanyBaseMapping( companyId );
									
									$('#company')
										.find('.caption p')
											.text( data.company[companyId].company_name + 'のミドリのチカラ' )
											.attr('id', 'company_id_'+companyId)
											.end()
										.find('.txtArea p')
											.html( data.company[companyId].company_outline.truncate(40) )
											.end()
										.show();
								}
								
								$('#menu .btnReset').show();
								$('#menu').css( 'width', '460px' );
							}).end();
		
		// ふきだしを設定
		GEvent.addListener(marker, "click", function() {
			var centerPoint = marker.getLatLng();
			var centerPoint = new GLatLng( centerPoint.lat(), centerPoint.lng() );
			var currentMapType = self.map.getCurrentMapType();
			var currentProjection = currentMapType.getProjection();
			var zoom = self.map.getZoom();
			
			var centerPixcel = currentProjection.fromLatLngToPixel( centerPoint, zoom );
			centerPixcel.x = centerPixcel.x + 50;
			centerPixcel.y = centerPixcel.y - 150;
			var currentPosition = currentProjection.fromPixelToLatLng( centerPixcel, zoom );
			
			self.map.panTo( currentPosition );
			
			setTimeout(function(){
				marker.openInfoWindowHtml( $(insertObj).get(0) );
			}, 1000 );
			
		});
		
	},
	drowLine : function ( startPosObj, endPosObj, energyId ) {
		var self = this;
		
		// google map上で線を引く
		var points = new Array();
		points[0] = new GLatLng( startPosObj.lat, startPosObj.lon );
		points[1] = new GLatLng( endPosObj.lat, endPosObj.lon );
		var polyline = new GPolyline( points, self.energyLineColor[energyId], self.energyLineWeight, 0.7 );
		self.map.addOverlay(polyline);
	},
	resetMarker : function () {
		var self = this;
		
		// 全てのマーカーを削除
		self.map.clearOverlays();
		
		// 全ての発電所のマーカーをmap上にマッピング
		$.each( data.plant, function( key, plantData ){
			var marker = self.createMarker( plantData, 'plant', plantData.energy_id );
			self.setBaloon( marker, plantData, 'plant' );
		});
		
		// google mapの中心を設定
		self.map.setCenter( new GLatLng( 39.62, 139.45 ), 5 );
		//self.map.setCenter( new GLatLng( 35.661803, 139.712828 ), 19 );
	}
}


EarthDay.API = function(){
	var self = this;
	
	self.EnergyNameRelation = {
		'Wind'  : 1,
		'Water' : 2,
		'Sun'   : 3,
		'Heat'  : 4,
		'Bio'   : 5
	}
	
	self.EnergyIdRelation = {
		1 : {
			'className' : 'wind',
			'plantName' : '風力発電'
		},
		2 : {
			'className' : 'water',
			'plantName' : '水力発電'
		},
		3 : {
			'className' : 'sun',
			'plantName' : '太陽光発電'
		},
		4 : {
			'className' : 'heat',
			'plantName' : '地熱発電'
		},
		5 : {
			'className' : 'bio',
			'plantName' : 'バイオマス発電'
		}
	}
};
EarthDay.API.prototype = {
	replacePlantData : function ( energyType ) {
		var self = this;
		
		// 既存の発電所詳細が格納されているノードをクリア
		$('ul.plant').empty();
		
		var insertNode = new Array();
		$.each( data.plant, function( key, plantData ){
			if ( parseInt(self.EnergyNameRelation[energyType]) == parseInt(plantData.energy_id) ) {
				insertNode.push( '<li id="'+plantData.plant_id+'"><a href="" alt="発電所">'+$.trim(plantData.plant_name)+'</a></li>' );
			}
		});
		
		if ( insertNode.length == 0 ) {
			$('#boxAbout'+energyType+' h3.plant').text('発電所(全'+insertNode.length+'件)');
			$('#boxAbout'+energyType+' ul.plant').append('<li>このエネルギーを発電している発電所は現在登録されていません。</li>');
			return;
		}
		$('#boxAbout'+energyType+' h3.plant').text('発電所(全'+insertNode.length+'件)');
		$('#boxAbout'+energyType+' ul.plant').append( insertNode.join('') );
		
		$('#boxAbout'+energyType+' ul.plant li').unbind().click(function(e){
			e.preventDefault();
			
			var plantId = $(this).attr('id');
			
			EarthDay.mapObj.map.clearOverlays();
			$('#infoBox .box').hide();
			
			self.writePlantBaseMapping( plantId );
			
			$('#plant')
				.find('.caption p')
					.text( data.plant[plantId].plant_name + 'のミドリのチカラ')
					.attr('id', 'plant_id_'+plantId)
					.end()
				.find('.txtArea p')
					.empty().append( data.plant[plantId].plant_outline.truncate(40) )
					.end()
				.show();
			$('.lightbox').hide();
			$('#menu .btnReset').show();
			$('#menu').css( 'width', '460px' );
		});
		
	},
	replaceCompanyData : function ( energyType ) {
		var self = this;
		
		$('ul.company').empty();
		
		var insertNode = new Array();
		var storeSum   = 0;
		$.each( data.company, function( key, companyData ){
			if ( companyData.energy.match(',') ) {
				var useEnergyList = companyData.energy.split(',');
			} else {
				var useEnergyList = new Array();
				useEnergyList.push( companyData.energy );
			}
			
			var matchFlag = false;
			$.each( useEnergyList, function( key, energyId ){
				if ( energyId == self.EnergyNameRelation[energyType] ) matchFlag = true;
			});
			if ( matchFlag ) {
				storeSum += parseInt(companyData.store_sum);
				insertNode.push( '<li id="company_id'+companyData.company_id+'"><a href="" alt="企業">'+$.trim(companyData.company_name)+'</a></li>' );
			}
		});
		
		if ( insertNode.length == 0 ) {
			$('#boxAbout'+energyType+' h3.company').text('使用企業(全'+insertNode.length+'件)');
			$('#boxAbout'+energyType+' ul.company').append('<li>このエネルギーを使用している企業は現在登録されていません。</li>');
			return;
		}
		$('#boxAbout'+energyType+' h3.company').text('使用企業(全'+insertNode.length+'件)');
		$('#boxAbout'+energyType+' ul.company').append( insertNode.join('') );
		
		$('#boxAbout'+energyType+' ul.company li').unbind().click(function(e){
			e.preventDefault();
			
			EarthDay.mapObj.map.clearOverlays();
			$('#infoBox .box').hide();
			
			var companyId = $(this).attr('id').split('company_id')[1];
			self.writeCompanyBaseMapping( companyId );
			
			$('#company')
				.find('.caption p')
					.text( data.company[companyId].company_name + 'のミドリのチカラ' )
					.attr('id', 'company_id_'+companyId)
					.end()
				.find('.txtArea p')
					.html( data.company[companyId].company_outline.truncate(40) )
					.end()
				.show();
			
			$('.lightbox').hide();
			$('#menu .btnReset').show();
			$('#menu').css( 'width', '460px' );
		})
	},
	getList : function ( type ) {
		var self = this;
		
		// 前回表示分をリセット
		var targetNode = $('#'+type).find('.listWrapp');
		targetNode.empty();
		
		if ( type == 'boxCompany' ) {
			$.each( data.company, function(key, companyData){
				var energyFlagList = {
					1 : 'none',
					2 : 'none',
					3 : 'none',
					4 : 'none',
					5 : 'none'
				}
				
				// 使用エネルギーのリストを作成
				var energyList = companyData.energy.split(',');
				var energyNode = new Array();
				$.each(energyList, function( key, energyId ){
					energyFlagList[energyId] = 'block';
				});
				
				var insertHTML = [
									'<dl class="list">',
										'<dt id="company_id_'+companyData.company_id+'" class="imgCompany">',
											'<a title="企業別に地図を切り替え" href="">',
												'<img alt="企業" src="img/logo/'+companyData.company_image+'" />',
											'</a>',
										'</dt>',
										'<dd id="company_id_'+companyData.company_id+'" class="name"><a href="" alt="企業">'+companyData.company_name+'</a></dd>',
										'<dd class="data">使用電力量：'+insertComma( companyData.quantity )+'kWh</dd>',
										'<dd class="kind">',
											'<span>使用電力:</span>',
											'<img alt="風力発電" src="img/icn_wind.gif" style="display:'+energyFlagList[1]+'"/>',
											'<img alt="水力発電" src="img/icn_water.gif" style="display:'+energyFlagList[2]+'"/>',
											'<img alt="太陽光発電" src="img/icn_sun.gif" style="display:'+energyFlagList[3]+'"/>',
											'<img alt="地熱発電" src="img/icn_heat.gif" style="display:'+energyFlagList[4]+'"/>',
											'<img alt="バイオマス" src="img/icn_bio.gif" style="display:'+energyFlagList[5]+'"/>',
										'</dd>',
									'</dl>'
				].join('\n');
				
				targetNode.append(insertHTML);
				
				$('#boxCompany').find('.imgCompany:last, .name:last').unbind().click(function(e){
					e.preventDefault();
					
					var companyId = $(this).attr('id').split('company_id_')[1];
					
					// map上のマーカーを全て削除
					EarthDay.mapObj.map.clearOverlays();
					$('#infoBox .box').hide();
					
					self.writeCompanyBaseMapping( companyId );
					
					$('#company')
						.find('.caption p')
							.text( companyData.company_name + 'のミドリのチカラ' )
							.attr('id', 'company_id_'+companyId)
							.end()
						.find('.txtArea p')
							.html( companyData.company_outline.truncate(40) )
							.end()
						.show();
					
					$('.lightbox').hide();
					$('#menu .btnReset').show();
					$('#menu').css( 'width', '460px' );
					
				});
			})
		
		} else {
			$.each( data.organization, function( key, organizationData ){
				var energyFlagList = {
					1 : 'none',
					2 : 'none',
					3 : 'none',
					4 : 'none',
					5 : 'none'
				}
				
				var energyList = new Array();
				if ( organizationData.energy.match(',') ) {
					energyList = organizationData.energy.split(',');
				} else {
					energyList.push( organizationData.energy );
				}
				$.each(energyList, function( key, energyId ){
					energyFlagList[energyId] = 'block';
				});
				
				var insertHTML = ([
									'<dl class="list">',
										'<dt id="organization_id_'+organizationData.organization_id+'" class="imgCompany">',
											'<a title="機関別に地図を切り替え" href="">',
												'<img alt="機関" src="img/logo/'+organizationData.organization_image+'"/>',
											'</a>',
										'</dt>',
										'<dd id="organization_id_'+organizationData.organization_id+'" class="name"><a title="機関" href="">'+organizationData.organization_name+'</a></dd>',
										'<dd class="kind">',
											'<img alt="風力発電" src="img/icn_wind.gif" style="display:'+energyFlagList[1]+'"/>',
											'<img alt="水力発電" src="img/icn_water.gif" style="display:'+energyFlagList[2]+'"/>',
											'<img alt="太陽光発電" src="img/icn_sun.gif" style="display:'+energyFlagList[3]+'"/>',
											'<img alt="地熱発電" src="img/icn_heat.gif" style="display:'+energyFlagList[4]+'"/>',
											'<img alt="バイオマス" src="img/icn_bio.gif" style="display:'+energyFlagList[5]+'"/>',
										'</dd>',
									'</dl>'
				].join(''));
				
				targetNode.append(insertHTML);
				
				$('#boxDeed').find('.imgCompany:last, .name:last').unbind().click(function(e){
					e.preventDefault();
					
					var organizationId = $(this).attr('id').split('organization_id_')[1];
					
					EarthDay.mapObj.map.clearOverlays();
					$('#infoBox .box').hide();
					
					self.writeOrganizationBaseMapping( organizationId );
					
					if ( data.organization[organizationId].organization_outline == '' ) data.organization[organizationId].organization_outline = '記載されていません。';
					
					$('#organization')
						.find('.caption p')
							.text( data.organization[organizationId].organization_name + 'のミドリのチカラ' )
							.attr('id', 'organization_id_'+organizationId)
							.end()
						.find('.txtArea p')
							.html( data.organization[organizationId].organization_outline.truncate(40) )
							.end()
						.show()
					
					$('.lightbox').hide();
					$('#menu .btnReset').show();
					$('#menu').css( 'width', '460px' );
					
				});
			})

		}
	},
	findEnergy : function( energyName ){
		var self = this;
		// クリックされたエネルギーID
		var energyId =self.EnergyNameRelation[energyName];
		self.mapPressEnergy = energyId;
		
		EarthDay.mapObj.map.clearOverlays();
		
		var searchId   = $('.condition_id').attr('id');
		var searchType = $('.condition_type').attr('id');
		
		if ( !searchId || !searchType ) return self.writeDefaultBaseMapping( energyId );
		
		switch ( searchType ) {
			case 'type_company' : 
				self.writeCompanyBaseMapping( searchId, energyId );
				break;
			case 'type_organization' : 
				self.writeOrganizationBaseMapping( searchId, energyId );
				break;
			case 'type_plant' : 
				self.writePlantBaseMapping( searchId, energyId );
				break;
		}
		
	},
	getDetailCompany : function ( companyId ) {
		var self = this;
		
		var companyData = data.company[companyId];
		if ( companyData.thumbnail_image == '' ) companyData.thumbnail_image = 'no_image.jpg';
		$('#boxAboutCompany')
			.find('h2').text( companyData.company_name ).end()
			.find('.imgArea img').attr( 'src', '/img/photo/'+companyData.thumbnail_image ).end()
			.find('.txtArea').html( companyData.company_outline ).end();
		
		// 会社の店舗情報を更新
		$('#boxAboutCompany ul:first').empty();
		$.each( data.store, function( key, storeData ){
			if ( storeData.company_id != companyId ) return true;
			$('#boxAboutCompany ul:first').append('<li>'+storeData.store_name+'</li>');
		});
		
		$('#boxAboutCompany ul.linkHp a').attr('href', companyData.company_url );
		$('#boxAboutCompany ul.linkHp a').text( companyData.company_url );
	},
	getDetailOrganization : function ( organizationId ) {
		var self = this;
		
		var organizationData = data.organization[organizationId];
		if ( organizationData.organization_image == '' ) organizationData.organization_image = 'no_image.jpg';
		$('#boxAboutFacility')
			.find('h2').text( organizationData.organization_name ).end()
			.find('.imgArea img').attr( 'src', '/img/photo/'+organizationData.organization_image ).end()
			.find('ul.linkHp li a').attr( 'href', organizationData.organization_url ).text( organizationData.organization_url ).end()
			.find('.txtArea').html( organizationData.organization_outline );
		
		$('#boxAboutFacility .energieList').empty();
		var energyList = new Array();
		if ( organizationData.energy.match(',') ) {
			energyList = organizationData.energy.split(',');
		} else {
			energyList.push( organizationData.energy );
		}
		
		$.each( energyList, function( key, energyId ){
			var energyInfo = self.EnergyIdRelation[energyId];
			$('#boxAboutFacility .energieList').append('<li id="organization_id'+organizationId+'" class="'+energyInfo.className+'">'+energyInfo.plantName+'</li>');
		});
		
		$('#boxAboutFacility .energieList li').unbind().click(function(e){
			e.preventDefault();
			
			self.writeCompanyBaseMapping( companyId );
			
			$('#organization')
				.find('.caption p')
					.text( data.organization[organizationId].organization_outline.truncate(40) )
					.attr('id', 'organization_id_'+organizationId)
					.end()
				.find('.txtArea p')
					.html( data.organization[organizationId].organization_outline )
					.end()
				.show();
			
			$('.lightbox').hide();
			$('#menu .btnReset').show();
			$('#menu').css( 'width', '460px' );
		});
	},
	getDetailPlant : function ( plantId ) {
		var self = this;
		
		var plantData = data.plant[plantId];
		if ( plantData.plant_image == '' ) plantData.plant_image = 'map_no_image.jpg';
		$('#boxAboutPlant')
			.find('h2').text( plantData.plant_name ).end()
			.find('.imgArea img').attr( 'src', '/img/photo/'+plantData.plant_image ).end()
			.find('.txtArea').empty().append( plantData.plant_outline ).end()
			.find('ul').empty();
		
		var storeList = new Array();
		if ( !plantData.store ) return true;
		if ( plantData.store.match(',') ) {
			storeList = plantData.store.split(',');
		} else {
			storeList.push( plantData.store );
		}
		
		var companyList = {};
		$.each( storeList, function( key, storeId ){
			companyList[data.store[storeId].company_id] = true;
		});
		
		var storeSum;
		var companySum = 0;
		$.each( companyList, function( companyId, bool ){
			companySum++;
			storeSum = parseInt( data.company[companyId].store_sum );
			$('#boxAboutPlant ul').append('<li id="company_id'+companyId+'">'+$.trim(data.company[companyId].company_name)+'</li>');
		});
		
		$('#boxAboutPlant h3').text('使用企業(全'+companySum+'件)')
		
	},
	writeCompanyBaseMapping : function( companyId, energyId ){
		var conditionFlag = ( energyId ) ? true : false;
		if ( conditionFlag ) {
			// storeをマッピング
			var conditionMatchStoreList = new Array();
			$.each( data.store, function( storeId, storeData ){
				if ( storeData.company_id != companyId ) return true;
				if ( !storeData.energy.match(energyId) ) return true;
				
				if ( !storeData.plant ) return true;
				if ( storeData.plant.match(',') ) {
					$.each( storeData.plant.split(','), function( key, plantId ){
						conditionMatchStoreList.push( { 'plant_id':plantId, 'lat':storeData.lat, 'lon':storeData.lon } );
					});
				} else {
					conditionMatchStoreList.push( { 'plant_id':storeData.plant, 'lat':storeData.lat, 'lon':storeData.lon } );
				}
				var marker = EarthDay.mapObj.createMarker( storeData, 'store', storeData.company_id );
				EarthDay.mapObj.setBaloon( marker, storeData, 'store' );
			});
			
			$.each( conditionMatchStoreList, function( key, postionData ){
				if ( data.plant[postionData.plant_id].energy_id != energyId ) return true;
				var energyPos = {
					'lat' : data.plant[postionData.plant_id].lat,
					'lon' : data.plant[postionData.plant_id].lon
				}
				
				var marker = EarthDay.mapObj.createMarker( data.plant[postionData.plant_id], 'plant', data.plant[postionData.plant_id].energy_id );
				EarthDay.mapObj.setBaloon( marker, data.plant[postionData.plant_id], 'plant' );
				EarthDay.mapObj.drowLine( postionData, energyPos, data.plant[postionData.plant_id].energy_id );
			});
		} else {
			var plantList = new Array();
			$.each( data.store, function( key, storeData ){
				if ( storeData.company_id != companyId ) return true;
				// 企業IDがマッチした店舗をマッピング
				var marker = EarthDay.mapObj.createMarker( storeData, 'store', storeData.company_id );
				EarthDay.mapObj.setBaloon( marker, storeData, 'store' );
				
				// 該当の発電所のID LISTを作成
				if ( !storeData.plant ) return true;
				if ( storeData.plant.match(',') ) {
					$.each( storeData.plant.split(','), function( key, plantId ){
						plantList.push( { 'plant_id':plantId, 'lat':storeData.lat, 'lon':storeData.lon } );
					});
				} else {
					plantList.push( { 'plant_id':storeData.plant, 'lat':storeData.lat, 'lon':storeData.lon } );
				}
			});
			
			
			// 発電所のマーカーと線を引く
			$.each( plantList, function( key, postionData ){
				var energyPos = {
					'lat' : data.plant[postionData.plant_id].lat,
					'lon' : data.plant[postionData.plant_id].lon
				}
				var marker = EarthDay.mapObj.createMarker( data.plant[postionData.plant_id], 'plant', data.plant[postionData.plant_id].energy_id );
				EarthDay.mapObj.setBaloon( marker, data.plant[postionData.plant_id], 'plant' );
				EarthDay.mapObj.drowLine( postionData, energyPos, data.plant[postionData.plant_id].energy_id );
			});
		}
		
		$('.condition_id').attr( 'id', companyId );
		$('.condition_type').attr( 'id', 'type_company' );
	},
	writeOrganizationBaseMapping : function( organizationId, energyId ){
		var conditionFlag = ( energyId ) ? true : false;
		var plantList = new Array();
		$.each( data.plant, function( plantId, plantData ){
			if ( plantData.organization_id == organizationId ) {
				plantList.push( plantData );
			}
		});
		
		if ( plantList.length == 0 ) {
			$('.lightbox').hide();
			alert('申し訳御座いませんが、該当の発行機関のデータは御座いませんでした。');
		}
		
		$.each( plantList, function( key, plantData ){
			if ( conditionFlag ) {
				if ( plantData.energy_id != energyId ) return true;
			}
			var marker = EarthDay.mapObj.createMarker( plantData, 'plant', plantData.energy_id );
			EarthDay.mapObj.setBaloon( marker, plantData, 'plant' );
			
			if ( !plantData.store ) return true;
			var storeArray = ( plantData.store.match(',') ) ?
				plantData.store.split(',') : 
				new Array(plantData.store);
			
			var plantPostionData = {
				'plant_id' : plantData.plant_id,
				'lat'      : plantData.lat,
				'lon'      : plantData.lon
			};
			
			$.each( storeArray, function( key, storeId ){
				var marker = EarthDay.mapObj.createMarker( data.store[storeId], 'store', data.store[storeId].company_id );
				EarthDay.mapObj.setBaloon( marker, data.store[storeId], 'store' );
				
				var storePositionData = {
					'store_id' : storeId,
					'lat'      : data.store[storeId].lat,
					'lon'      : data.store[storeId].lon
				}
				
				EarthDay.mapObj.drowLine( storePositionData, plantPostionData, data.plant[plantData.plant_id].energy_id );
			});
		});
		
		$('.condition_id').attr( 'id', organizationId );
		$('.condition_type').attr( 'id', 'type_organization' );
	},
	writePlantBaseMapping : function( plantId, energyId ){
		var conditionFlag = ( energyId ) ? true : false;
		if ( conditionFlag ) {
			if ( data.plant[plantId].energy_id != energyId ) return;
		}
		var marker = EarthDay.mapObj.createMarker( data.plant[plantId], 'plant', data.plant[plantId].energy_id );
		EarthDay.mapObj.setBaloon( marker, data.plant[plantId], 'plant' );
		
		var plantPos = { 'plant_id':plantId, 'lat':data.plant[plantId].lat, 'lon':data.plant[plantId].lon };
		var storePos = new Array();
		
		$.each( data.store, function( key, storeData ){
			var plantList = new Array();
			if ( !storeData.plant ) return true;
			if ( storeData.plant.match(',') ) {
				plantList = storeData.plant.split(',');
			} else {
				plantList.push( storeData.plant );
			}
			
			$.each( plantList, function( key, plant_id ){
				if ( plantId != plant_id ) return true;
				var marker = EarthDay.mapObj.createMarker( storeData, 'store', storeData.company_id );
				EarthDay.mapObj.setBaloon( marker, storeData, 'store' );
				
				storePos.push({ 'plant_id':plant_id, 'lat':storeData.lat, 'lon':storeData.lon });
			});
		});
		
		$.each( storePos, function( key, postionData ){
			EarthDay.mapObj.drowLine( postionData, plantPos, data.plant[plantId].energy_id );
		});
		
		$('.condition_id').attr( 'id', plantId );
		$('.condition_type').attr( 'id', 'type_plant' );
	},
	writeDefaultBaseMapping : function ( energyId ) {
		// 全ての発電所のマーカーをmap上にマッピング
		$.each( data.plant, function( key, plantData ){
			if ( plantData.energy_id != energyId ) return true;
			
			var marker = EarthDay.mapObj.createMarker( plantData, 'plant', plantData.energy_id );
			EarthDay.mapObj.setBaloon( marker, plantData, 'plant' );
			
			var plantPositionData = new Array();
			var plantPositionData = { 'plant_id' : plantData.plant_id, 'lat' : plantData.lat, 'lon':plantData.lon };
			
			var storeList = new Array();
			if ( !plantData.store ) return true;
			if ( plantData.store.match(',') ) {
				storeList = plantData.store.split(',');
			} else {
				storeList.push( plantData.store );
			}
			
			$.each( storeList, function( key, storeId ){
				var energyPos = { 'lat' : data.store[storeId].lat, 'lon' : data.store[storeId].lon };
				
				var marker = EarthDay.mapObj.createMarker( data.store[storeId], 'store', data.store[storeId].company_id );
				EarthDay.mapObj.setBaloon( marker, data.store[storeId], 'store' );
				EarthDay.mapObj.drowLine( plantPositionData, energyPos, data.plant[plantPositionData.plant_id].energy_id );
			});
		});
	}
}