var directions; //ルートのインスタンス  
var directionRenderer; //ルートレンダラ  
var map;      //マップのインスタンス  
var ds = google.maps.DirectionsStatus;//ルート結果のステータス  
var directionsErr = new Array(); //ルート結果のエラーメッセージ  
directionsErr[ds.INVALID_REQUEST] = "指定された DirectionsRequest が無効です。";  
directionsErr[ds.MAX_WAYPOINTS_EXCEEDED] = "DirectionsRequest に指定された DirectionsWaypoint が多すぎます。ウェイポイントの最大許容数は 8 に出発地点と到着地点を加えた数です。";  
directionsErr[ds.NOT_FOUND] = "出発地点、到着地点、ウェイポイントのうち、少なくとも 1 つがジオコード化できませんでした。";  
directionsErr[ds.OVER_QUERY_LIMIT] = "ウェブページは、短期間にリクエストの制限回数を超えました。";  
directionsErr[ds.REQUEST_DENIED] = "ウェブページではルート サービスを使用できません。";  
directionsErr[ds.UNKNOWN_ERROR] = "サーバー エラーのため、ルート リクエストを処理できませんでした。もう一度試すと正常に処理される可能性があります。";  
directionsErr[ds.ZERO_RESULTS] = "出発地点と到着地点間でルートを見つけられませんでした。";  
var setMap = false;

$(document).ready(function(){ 
	init();
}); 

function init() {
	$(".ps").hover(function(){
		if(this.src.slice( -6, -3 )!="_x."){
			this.src = this.src.substring(0,this.src.length-4)+"_x"+this.src.slice(-4);
		}
	});
	$(".ps").mouseout(function(){
		if(this.src.slice( -6, -3 )=="_x."){
			this.src = this.src.substring(0,this.src.length-6)+this.src.slice(-4);
		}
	});
	$("a.zoom").fancybox({
		'overlayOpacity'	:	0.7,
		'overlayColor'		:	'#FFF',
		'zoomSpeedIn'		:	300,
		'zoomSpeedOut'		:	200,
		'callbackOnShow'	:	true,
		'onComplete'	:	function() { init(); }
	});
	setRollOver2();
	ss_init();
}

/**
 * クロスフェードするロールオーバー処理
 * rollover2.js
 * Copyright (c) 2007 KAZUMiX
 * http://d.hatena.ne.jp/KAZUMiX/20071017/rollover2
 * 
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * 更新履歴
 * 2009/06/02 ブラウザの「戻る」でフェード状態が残っている場合に対処
 * 2007/10/17 公開
 */

   // ページ遷移時に透明にする用
   var rolloverImages = [];
   
   function setRollOver2(){
     if(!document.images){return;}
     var imgs = document.images;
     var insert = [];
	var isMSIE = /*@cc_on!@*/false; 
	if ( isMSIE ) {
		//IEはフェードさせない	
		 for(var i=0,len=imgs.length; i<len; i++){
			   var splitname = imgs[i].src.split('_rollout.');
			   if(splitname[1]){
				 addEvent(imgs[i],'mouseover',function(){setFader2(this,100);});
				 addEvent(imgs[i],'mouseout',function(){setFader2(this,0);});
			  }
		}
		return;
	} else {
		 for(var i=0,len=imgs.length; i<len; i++){
		   var splitname = imgs[i].src.split('_rollout.');
		   if(splitname[1]){
			 var rolloverImg = document.createElement('img');
			 rolloverImages.push(rolloverImg);
			 rolloverImg.src = splitname[0]+'_rollover.'+splitname[1];
			 var alpha = 0;
			 rolloverImg.currentAlpha = alpha;
			 rolloverImg.style.opacity = alpha/100;
			 rolloverImg.style.filter = 'alpha(opacity='+alpha+')';
			 rolloverImg.style.position = 'absolute';
	
			 //ロールオーバー・アウト処理それぞれを設定
			 addEvent(rolloverImg,'mouseover',function(){setFader(this,100);});
			 addEvent(rolloverImg,'mouseout',function(){setFader(this,0);});
			 // 後で追加するために追加場所と共に保存しておく
			 // この時点で追加するとdocument.imagesが書き換わって不都合
			 insert[insert.length] = {position:imgs[i],element:rolloverImg};
		   }
		 }
     }
	 // ↑で作ったロールオーバー画像を追加
     for(i=0,len=insert.length; i<len ;i++){
       var parent = insert[i].position.parentNode;
       parent.insertBefore(insert[i].element,insert[i].position);
     }

     // ページ遷移時にはフェード状態をクリアする
     addEvent(window,'beforeunload', clearRollover);
   }

   // 指定要素を指定透明度にするためのフェードアニメを設定する関数

   function setFader2(targetObj,targetAlpha){
	   	if ( targetAlpha == 100 ) {
			var splitname = targetObj.src.split('_rollout.');
			targetObj.src = splitname[0]+'_rollover.'+splitname[1];
		} else {
			var splitname = targetObj.src.split('_rollover.');
			targetObj.src = splitname[0]+'_rollout.'+splitname[1];
		}
	}
   function setFader(targetObj,targetAlpha){
     targetObj.targetAlpha = targetAlpha;
     if(targetObj.currentAlpha==undefined){
       targetObj.currentAlpha = 100;
     }
     if(targetObj.currentAlpha==targetObj.targetAlpha){
       return;
     }
     if(!targetObj.fading){
       if(!targetObj.fader){
         targetObj.fader = fader;
       }
       targetObj.fading = true;
       targetObj.fader();
     }
   }

   // アルファ値をターゲット値に近づける関数
   // ターゲット値になったら終了

   function fader(){
     this.currentAlpha += (this.targetAlpha - this.currentAlpha)*0.2;
     if(Math.abs(this.currentAlpha-this.targetAlpha)<1){
       this.currentAlpha = this.targetAlpha;
       this.fading = false;
     }
     var alpha = parseInt(this.currentAlpha);
     this.style.opacity = alpha/100;
     this.style.filter = 'alpha(opacity='+alpha+')';
     if(this.fading){
       var scope = this;
       setTimeout(function(){fader.apply(scope)},40);
     }
   }
   
   // すべてのロールオーバー画像をを透明にする関数（遷移時用）

   function clearRollover(){
     for(var i=0,len=rolloverImages.length; i<len; i++){
       var image = rolloverImages[i];
       image.style.opacity = 0;
       image.style.filter = 'alpha(opacity=0)';
     }
   }

   // イベントを追加する関数

   function addEvent(eventTarget, eventName, func){
     if(eventTarget.addEventListener){
       // モダンブラウザ
       eventTarget.addEventListener(eventName, func, false);
     }else if(window.attachEvent){
       // IE
       eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);});
     }
   }

// UTF-8
/**
 * scrollsmoothly.js
 * Copyright (c) 2008 KAZUMiX
 * http://d.hatena.ne.jp/KAZUMiX/20080418/scrollsmoothly
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * 更新履歴
 * 2009/02/12
 * スクロール先が画面左上にならない場合の挙動を修正
 * 2008/04/18
 * 公開
 *
*/

   var ss_easing = 0.25;
   var ss_interval = 20;
   var ss_d = document;
   var ss_targetX = 0;
   var ss_targetY = 0;
   var ss_targetHash = '';
   var ss_scrolling = false;
   var ss_splitHref = location.href.split('#');
   var ss_currentHref_WOHash = ss_splitHref[0];
   var ss_incomingHash = ss_splitHref[1];
   var ss_prevX = null;
   var ss_prevY = null;

   // ドキュメント読み込み完了時にss_init()を実行する
//   ss_addEvent(window, 'load', ss_init);

   // ドキュメント読み込み完了時の処理
   function ss_init(){
     // ページ内リンクにイベントを設定する
     ss_setOnClickHandler();
     // 外部からページ内リンク付きで呼び出された場合
     if(ss_incomingHash){
       if(window.attachEvent && !window.opera){
         // IEの場合はちょっと待ってからスクロール
         setTimeout(function(){scrollTo(0,0);ss_setScroll('#'+ss_incomingHash);},50);
       }else{
         // IE以外はそのままGO
         scrollTo(0, 0);
         ss_setScroll('#'+ss_incomingHash);
       }
     }
   }

   // イベントを追加する関数
   function ss_addEvent(eventTarget, eventName, func){
     if(eventTarget.addEventListener){
       // モダンブラウザ
       eventTarget.addEventListener(eventName, func, false);
     }else if(window.attachEvent){
       // IE
       eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);});
     }
   }
   
   function ss_setOnClickHandler(){
     var links = ss_d.links;
     for(var i=0; i<links.length; i++){
       // ページ内リンクならスクロールさせる
       var link = links[i];
       var splitLinkHref = link.href.split('#');
       if(ss_currentHref_WOHash == splitLinkHref[0] && ss_d.getElementById(splitLinkHref[1])){
         ss_addEvent(link, 'click', ss_startScroll);
       }
     }
   }

   function ss_startScroll(event){
     // リンクのデフォルト動作を殺す
     if(event){ // モダンブラウザ
       event.preventDefault();
       //alert('modern');
     }else if(window.event){ // IE
       window.event.returnValue = false;
       //alert('ie');
     }
     // thisは呼び出し元になってる
     ss_setScroll(this.hash);
   }

   function ss_setScroll(hash){
     // ハッシュからターゲット要素の座標をゲットする
     var targetEle = ss_d.getElementById(hash.substr(1));
     if(!targetEle)return;
     //alert(scrollSize.height);
     // スクロール先座標をセットする
     var ele = targetEle;
     var x = 0;
     var y = 0;
     while(ele){
       x += ele.offsetLeft;
       y += ele.offsetTop;
       ele = ele.offsetParent;
     }
     var maxScroll = ss_getScrollMaxXY();
     ss_targetX = Math.min(x, maxScroll.x);
     ss_targetY = Math.min(y, maxScroll.y);
     ss_targetHash = hash;
     // スクロール停止中ならスクロール開始
     if(!ss_scrolling){
       ss_scrolling = true;
       ss_scroll();
     }
   }

   function ss_scroll(){
     var currentX = ss_d.documentElement.scrollLeft||ss_d.body.scrollLeft;
     var currentY = ss_d.documentElement.scrollTop||ss_d.body.scrollTop;
     var vx = (ss_targetX - currentX) * ss_easing;
     var vy = (ss_targetY - currentY) * ss_easing;
     var nextX = currentX + vx;
     var nextY = currentY + vy;
     if((Math.abs(vx) < 1 && Math.abs(vy) < 1)
       || (ss_prevX === currentX && ss_prevY === currentY)){
       // 目標座標付近に到達していたら終了
       scrollTo(ss_targetX, ss_targetY);
       ss_scrolling = false;
//       location.hash = ss_targetHash;	//mcstudio on comment
       ss_prevX = ss_prevY = null;
       return;
     }else{
       // 繰り返し
       scrollTo(parseInt(nextX), parseInt(nextY));
       ss_prevX = currentX;
       ss_prevY = currentY;
       setTimeout(function(){ss_scroll()},ss_interval);
     }
   }
   
   function ss_getDocumentSize(){
     return {width:Math.max(document.body.scrollWidth, document.documentElement.scrollWidth), height:Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)};
   }

   function ss_getWindowSize(){
     var result = {};
     if(window.innerWidth){
       var box = ss_d.createElement('div');
       with(box.style){
         position = 'absolute';
         top = '0px';
         left = '0px';
         width = '100%';
         height = '100%';
         margin = '0px';
         padding = '0px';
         border = 'none';
         visibility = 'hidden';
       }
       ss_d.body.appendChild(box);
       var width = box.offsetWidth;
       var height = box.offsetHeight;
       ss_d.body.removeChild(box);
       result = {width:width, height:height};
     }else{
       result = {width:ss_d.documentElement.clientWidth || ss_d.body.clientWidth, height:ss_d.documentElement.clientHeight || ss_d.body.clientHeight};
     }
     return result;
   }
   
   function ss_getScrollMaxXY() {
     if(window.scrollMaxX && window.scrollMaxY){
       return {x:window.scrollMaxX, y:window.scrollMaxY};
     }
     var documentSize = ss_getDocumentSize();
     var windowSize = ss_getWindowSize();
     return {x:documentSize.width - windowSize.width, y:documentSize.height - windowSize.height};
   }
   
function displayList( tp ) {
	$.ajax({
		url : "list.php",
		type : "post",
		data : "mode=search&tp="+tp,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			//送信後の処理
			$('#list_area').html( request );
			$('#list_area').show(200);
			init();
		}
	});
}

function displayList2( ) {
	var txt = '';
	txt += ( document.getElementById('tp1').checked ? '&' + 'tp=see' : '' );
	txt += ( document.getElementById('tp2').checked ? '&' + 'tp=eat' : '' );
	txt += ( document.getElementById('tp3').checked ? '&' + 'tp=play' : '' );
	txt += ( document.getElementById('tp4').checked ? '&' + 'tp=stay' : '' );
	txt += ( document.getElementById('ar').selectedIndex > 0 ? '&' + 'ar=' + document.getElementById('ar').options[document.getElementById('ar').selectedIndex].value : '' );
	txt += ( document.getElementById('op').selectedIndex > 0 ? '&' + 'op=' + document.getElementById('op').options[document.getElementById('op').selectedIndex].value : '' );
	txt += ( document.getElementById('wd').value!='' ? '&' + 'wd='+document.getElementById('wd').value : '' );
	$.ajax({
		url : "list.php",
		type : "post",
		data : "mode=search" + txt,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			//送信後の処理
			$('#list_area').html( request );
			$('#list_area').show(200);
			init();
		}
	});
}

function displayList3( tp ) {
	$.ajax({
		url : "list.php",
		type : "post",
		data : "mode=search2&tp2="+tp,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			//送信後の処理
			$('#list_area').html( request );
			$('#list_area').show(200);
			init();
		}
	});
}

function displayList4( tp ) {
	$.ajax({
		url : "list.php",
		type : "post",
		data : "no="+tp,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			//送信後の処理
			$('#list_area').html( request );
			$('#list_area').show(200);
			init();
		}
	});
}

function addPlan( pl, tp ) {
	$.ajax({
		url : "plan.php",
		type : "post",
		data : "mode=set&id=" + pl + '&tp=' + tp,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			//送信後の処理
			$('#main_top_sub').html( request );
			$('#background_image').remove();
			$('#index_ctrl_area').remove();
			$('#index_menu').remove();
			init();
			google_initialize();
			google_searchRoute();
		}
	});
}

function changePlan( pl, md, tp ) {
	$.ajax({
		url : "plan.php",
		type : "post",
		data : "mode="+md+"&id=" + pl + "&tp=" + tp,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			//送信後の処理
			$('#main_top_sub').html( request );
			$('#background_image').remove();
			init();
			google_initialize();
			google_searchRoute();
		}
	});
}

function google_initialize() {  
	// ルートの生成  
	directions = new google.maps.DirectionsService();  
	// ルートレンダラの生成  
	directionRenderer = new google.maps.DirectionsRenderer();  
	// Google Mapで利用する初期設定用の変数  
	var mapOptions = {  
		zoom: 14,  
		mapTypeId: google.maps.MapTypeId.ROADMAP,  
		center: new google.maps.LatLng(35.0429906, 139.8401276),
		language: 'JP'
	};  
	// GoogleMapの生成  
	map = new google.maps.Map(document.getElementById("map"), mapOptions);  
	// ルートレンダラにマップを関連付ける  
	directionRenderer.setMap(map);  
	directionRenderer.setPanel(document.getElementById("route"));  
}

// [検索]ボタン処理  
function google_searchRoute() { 
	$.ajax({
		url : "plan2.php",
		type : "post",
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			google_setMarker(request);
		}
	});
	init();
}

function google_searchRoute2( route) { 
	$.ajax({
		url : "plan2.php",
		type : "post",
		data : "route="+route,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			google_setMarker(request);
		}
	});
}

function google_searchRoute3( tp) { 
	$.ajax({
		url : "plan2.php",
		type : "post",
		data : "tp="+tp,
		error: function(request) {
			alert('送信に失敗しました');
		},
		success: function(request) {
			google_setMarker(request);
		}
	});
}

function google_setMarker( request ) {
	if ( request != '' ) {
		main_tmp = request.split('<!--main-->');
		if ( main_tmp[0] == '1' ) {
			$('#map_ctrl').html('<ol><li><b>徒歩</b></li><li><a href="#map" onclick="google_searchRoute3(2)">車</a></li></il>');
		} else {
			$('#map_ctrl').html('<ol><li><a href="#map" onclick="google_searchRoute3(1)">徒歩</a></li><li><b>車</b></il>');
		}
		tmp = main_tmp[1].split('<!--mcstudio-->');
		if ( tmp.length > 1 ) {
			var arr = new Array();
			var arr2 = new Array();
			j = 0;
			for ( i=1; i<=tmp.length; i++ ) {
				if ( i==1 ) {
					arr['origin'] = tmp[i-1];
				} else if ( i==tmp.length ){
					 arr['destination'] = tmp[i-1];
				} else {
					arr2[j] = new Array();
					arr2[j]['location'] = tmp[i-1];
					j++;
				}
			}
			if ( tmp.length >= 3 ) arr['waypoints'] = arr2;
			if ( ! (main_tmp[0] == '2') ) {
				arr['travelMode'] = google.maps.DirectionsTravelMode.WALKING;	//徒歩
			} else {
				arr['travelMode'] = google.maps.DirectionsTravelMode.DRIVING;	//車
			}
			// ルート検索を依頼する  
			$('#map_wrapp').css('display','block');
			directions.route( arr,  
				function(results, status) { // ルート結果callback関数  
					if (status == ds.OK) {  // 結果がOK ??  
						// 結果をレンダラに渡し、ルートをマップに表示  
						directionRenderer.setDirections(results);  
					} else {  
						// 結果がOKではない場合  
						alert("ルート検索が失敗しました。理由: " + directionsErr[status]);  
					}
				}
			);
			$('#route_wrapp').fadeIn(300);
		} else if ( tmp.length == 1 ) {
			//マーカー表示
			tmp = tmp[0].split(',');
			$('#map_wrapp').css('display','block');
			var map = new google.maps.Map(
			document.getElementById("map"),{
				zoom : 14,
				center : new google.maps.LatLng(tmp[0], tmp[1]),
				mapTypeId : google.maps.MapTypeId.ROADMAP
			}
			);
			var marker = new google.maps.Marker({
			position: new google.maps.LatLng(tmp[0], tmp[1]),
			map: map
			});
			$('#route_wrapp').fadeOut(300);
		}
	}
}

function createNewPlan( pt ) {
	if ( confirm( '作成しているプランがある場合、内容が置き換わります。よろしいですか' ) ) window.location.href='new.php?pt=' + pt;
}

function eventLoad(num) {
	$('#main_event_area').fadeOut(100, (function(num2) {
		$('#main_event_area').html('');
		$.ajax({
			url : "event.php",
			type : "post",
			data : "no="+num2,
			error: function(request) {
				alert('送信に失敗しました');
			},
			success: function(request) {
				$('#main_event_area').html(request);
				$('#main_event_area').fadeIn(200);
				init();
			}
		});
	})(num));
}
