// From George Coulouris July 2009; adapted by MLS; modified by GC 18-1-10

function StreetViewHandler(map) {
  if(!GStreetviewClient) { return null;}
	var me = this;
	this.map = map;	// the google map
	this.streetView;	// the most recently created view
	this.point;		// the lat,lng initial position of the views
	this.pov;		// the point of view
	this.SVClient = new GStreetviewClient();
	this.svData;
	this.marker;
	this.indicator;
	this.infoWindow;
	this.rideDirection;
	this.rideRunning;
	this.makeView = function(latitude, longitude, bearing) {
	  me.point = new GLatLng(latitude, longitude);

		me.SVClient.getNearestPanorama(me.point, function(panoData) {
			switch (panoData.code) {
			case 500:
			  // alert('Street View server not responding');
			  document.getElementById('streetViewContainer').innerHTML = '<span class="warning">Google Street View service not responding</span>';
			  break;
			case 600:
			  // alert('No Street View data here');
			  document.getElementById('streetViewContainer').innerHTML = '<span class="warning">Sorry, no Street View data here</span>';
			  break;
			default:
			  me.pov = {yaw: bearing, pitch: 0, zoom: 0};
			  me.showStreetView();
			}
		});
	};
	
	this.showStreetView = function() {
		var theContainer = document.getElementById('streetViewContainer');
		me.indicator = document.getElementById('rideRunningIndicator');
		
		me.streetView = new GStreetviewPanorama(theContainer, {latlng: me.point, pov: me.pov});
		GEvent.addListener(me.streetView, 'error', function(errorCode) {
			var reportStrings = {
					600: 	'Streetview not available at this position',
					603:	"Flash doesn't appear to be supported by your browser"
				}, 
				report = reportStrings[errorCode];
				
			theContainer.innerHTML = 
				'<i>' + (report?report:"Streetview error number: " + errorCode) + '</i>';
			});

		GEvent.addListener(me.streetView, 'initialized', function(svLoc) {
			me.point = svLoc.latlng;

			me.SVClient.getPanoramaById(svLoc.panoId, function(svData){
				if(svData.code == 200) {
					me.svData = svData;
				} else {
					me.svData = null;
						return;
				}
			});
		});
	};
}


var streetViewHandle = new StreetViewHandler(null);

function showStreetView (longitude, latitude, bearing, tableId, row, colspan) {
		
	// Remove an existing street view row if there is one - see http://www.daniweb.com/forums/thread196811.html
	if (document.getElementById('streetviewRow')) {
		var el = document.getElementById('streetviewRow');
		el.parentNode.removeChild(el);
	}
	
	// Insert a new table row, spanning sufficient columns; see: http://www.java2s.com/Code/JavaScript/HTML/Table.htm
	var x=document.getElementById(tableId).insertRow(row);
	x.id='streetviewRow';	// Give this row a unique ID
	var y=x.insertCell(0);
	y.colSpan=colspan;
	
	// Make a DIV placeholder in this new row
	y.innerHTML='<div id="streetViewContainer" class="faded">Street View loading &hellip;</div>';
	
	// Add the Street View panel itself
	if(streetViewHandle) {
		streetViewHandle.makeView(latitude, longitude, bearing);
	} else {
		document.getElementById('streetViewContainer').innerHTML = '<span class="warning">Google Street View service not responding</span>';
	}
}

