﻿// JavaScript Document
function getFlashByName(movieName) {
	 if(navigator.appName.indexOf("Microsoft") != -1){
	 	return window[movieName];
	 }else{
	 	return document[movieName];
	 }
}

//座標チェック
function checkLatLng(lat,lng){
	
	client.getNearestPanoramaLatLng(new GLatLng(lat,lng), function(e){
		if(e){
			getFlashByName("external_flashcontent").checkLatLng({lat:e.lat(),lng:e.lng()});
		}else{
			getFlashByName("external_flashcontent").checkLatLng(null);
		}
	});
}
//Street View
var client;//GStreetviewClient
var pano;//GStreetviewPanorama
var courseArray;//Array*[0:lat,1:lng,2:yaw];
var nowLatLng;//GLatLng of course
var key;//int*coursArray's key
var timer;//interval timer
var isFirst = true;//flag of first
var isShow = false;//flag of showing
var panoContainer;//container of pano
var missedCourse = false;//flag of coursemiss
var oldLatLng;//LatLng
function load() {
	panoContainer = document.getElementById("pano");
	pano = new GStreetviewPanorama(panoContainer);
	GEvent.addListener(pano,"initialized",_onInitialized);
	client = new GStreetviewClient();
}
function onResizeContainer(x,y){
	panoContainer.style.left = x + "px";
	panoContainer.style.top = y + "px";
}
//show streetview
var _startCourse;
function showCourseSV(array){
	isShow = true;
	_startCourse = true;
	courseArray = array;
	key = 0;
	pano.setLocationAndPOV(new GLatLng(courseArray[0][0],courseArray[0][1]),{yaw:courseArray[0][2]});
	clearTimeout(timer);
	timer = 0;
	if(isFirst){
		isFirst = false;
	}else{
		pano.show();	
	}
	setTimeout(running,3000);
}
function _onInitialized(loc){
	if(timer)return;
	if(_startCourse){
		_startCourse = false;
		key++;
		running();
		return;
	}
	clearTimeout(timer);
	timer = 0;
	var newLatLng = loc.latlng;
	client.getNearestPanoramaLatLng(oldLatLng, function(latlng){
		//console.log("oncallback");
		if(latlng == null){
			//console.log("null");
			timer = setTimeout("chikarawaza()",700);
			return;
		}
		if(newLatLng.equals(latlng)){
			//console.log("good");
			key++;
			if(key>=courseArray.length){
				final();
				return;
			}
			getFlashByName("external_flashcontent").runningCallback({lat:loc.latlng.lat(),lng:loc.latlng.lng()});
			//running();
			timer = setTimeout("running()",700);
		}else{
			//console.log("miss");
			timer = setTimeout("chikarawaza()",700);
		}
	})
}

function chikarawaza(){
	clearTimeout(timer);
	timer = 0;
	key++;
	if(key>=courseArray.length-1){
		final();
		return;
	}
	oldLatLng = new GLatLng(courseArray[key+1][0],courseArray[key+1][1]);
	pano.setLocationAndPOV(oldLatLng,{yaw:courseArray[key][2]});
}

function hideCourseSV(){
	isShow = false;
	clearTimeout(timer);
	timer = 0;
	courseArray = []
	key = 0;
	pano.hide();
}
//interval func
function running(){
	timer = 0;
	pano.setPOV({yaw:courseArray[key][2]});
	pano.followLink(courseArray[key][2]);
	if(key>=courseArray.length-1){
		final();
		return;
	}
	oldLatLng = new GLatLng(courseArray[key+1][0],courseArray[key+1][1]);
}
function missCourse(){
	//pano.setLocationAndPOV(new GLatLng(courseArray[key][0],courseArray[key][1]),{yaw:courseArray[key][2]});
}
//final of course;
function final(){
	clearTimeout(timer);
	timer = 0;
	var _finalKey = couseArray.length-1;
	var _finalLatLng = new GLatLng(courseArray[_finalKey][0],courseArray[_finalKey][1]);
	pano.setLocationAndPOV(_finalLatLng);
	getFlashByName("external_flashcontent").runningCallback({lat:_finalLatLng.lat(),lng:_finalLatLng.lng()});
	getFlashByName("external_flashcontent").runningFinishCallback();
}