// =============================================================================
// (c) 2008 MapJack.com
// Author: Bjorn Moren. bjorn@mapjack.com
// =============================================================================

var _panoViewer = null;
var _panoViewer2 = null;
var _message = "";
var _urlEncoded = "";
var _showDots = true;
var _index = 0;
var _lat = 0;
var _lon = 0;
var _heading = 0;
var _viewAngle = 0;
var _dotType = 0;

var _code = null;

var _currentAd = -1;
var _shouldChangeAd = true;

var _urlChanged = true;
var _positionChanged = true;
var _dotsChanged = true;

var _updateUrlTimer = null;
var _updateDotsTimer = null;
var _updatePositionTimer = null;

var panoramaLoaded = false;

//for report a concern page
function panoramaLoadReport(code)
{
	var cnt = 1;

    _panoViewer = document["panoGUI"];

    if (!_panoViewer) {
        setTimeout("panoramaLoad()", 200);
        return;
    }

    var timer = setInterval(function() {
    	navigateToEncoded(encodedVP);
    	if(cnt == 5)
    		clearInterval(timer);
    	else
    		cnt++;

    }, 200);
}

// for maplisting page
function panoramaLoad()
{
    _panoViewer = document["panoGUI"];
    //console.log('pano viewer : ' + _panoViewer);
    if(!_panoViewer) {
        setTimeout("panoramaLoad()", 200);
        return;
    }

   	setTimeout("initNav()", 500);
}

//for maplisting page
function panoramaLoad2(viewPoint)
{
	if(_panoViewer2 != null)
		_panoViewer2 = null;

    _panoViewer2 = document["panoGUI2"];

    if(!_panoViewer2) {
        setTimeout("panoramaLoad2()", 200);
        return;
    }

   	setTimeout(function(){initNav2(viewPoint);}, 300);
}

function initNav2(viewPoint) {
   		try {
   			_panoViewer2.navigateToEncoded(viewPoint);
   		}
   		catch(e) {
   			setTimeout(function() {	initNav2(viewPoint); }, 200);
   		}   	    
}

function initNav() {
	if(mjStreetView.options.pageType == 'M') {
		//var mk = iMap.getInitMarkerForJack();
		
		if(iMap.markers.length == 0) {	// not found data. for example, search for packaging in Whistler
			switchInit(MapLIB.getMapInstance().GetCenter().Latitude, MapLIB.getMapInstance().GetCenter().Longitude, null);
		} 
		else {
			// just take first one
			var mk = iMap.markers[0].marker;
	
			if(typeof mk._can_viewPoint !== 'undefined' && mk._can_viewPoint != "")
				switchInit(mk.GetPoints()[0].Latitude, mk.GetPoints()[0].Longitude, mk._can_viewPoint);
			else
				switchInit(mk.GetPoints()[0].Latitude, mk.GetPoints()[0].Longitude, null);
		}
	} 
	else {
		if(mjStreetView.options.viewPoint != "")
			switchInit(mjStreetView.options.initLat, mjStreetView.options.initLng, mjStreetView.options.viewPoint);
		else
			switchInit(mjStreetView.options.initLat, mjStreetView.options.initLng, null);
	}
}

// Navigate to lat, lon
function navigateTo(lat, lon, defaultHeading)
{
	try {
		_panoViewer.navigateTo(lat, lon, defaultHeading);
		_panoViewer.focus();
	}
	catch(e) {
		setTimeout(function() {
			navigateTo(lat, lon, defaultHeading);
			_panoViewer.focus();
		}, 300);
	}
}

// Navigate to encoded lat, lon
function navigateToEncoded(code)
{
	try {
		//console.log('pano view : navigateToEncoded');
		_panoViewer.navigateToEncoded(code);
		_panoViewer.focus();
	}
	catch(e) {
		setTimeout(function() {
			navigateToEncoded(code);
			_panoViewer.focus();
		}, 300);
	}
}

function turnTo(heading)
{
    _panoViewer.turnTo(heading);
}

// Call back from Flash to update status of map etc
function panoramaStatus(panoStatus) {
    if (panoStatus == null || panoStatus.length == 0) 
    	return;

    /*
    // get back to previous position
	if(!mjStreetView.isInit && panoStatus[4] == 0) { //&& _lat) {
		navigateTo(_lat, _lon, _heading);
		return;
	}

	if(mjStreetView.isInit)
		mjStreetView.isInit = false;
	*/

    // Message
    var message = String(panoStatus[0]);
    if (_message != message && message != "" && message != null) 
    	alert(message);
    
    _message = message;

    // URL
    var urlEncoded = String(panoStatus[1]);
    _urlChanged = (_urlEncoded != urlEncoded || _urlChanged);
    _urlEncoded = urlEncoded;

    // Type
    _dotType = parseInt(panoStatus[2]);

    // Dots
    var showDots = Boolean(panoStatus[3]);

    _dotsChanged = (_showDots != showDots || _dotsChanged);
    _showDots = showDots;

    // Position
    _index = Number(panoStatus[4]);  // if there is no image, it becomes 0
    
    var lat = Number(panoStatus[5]);
    var lon = Number(panoStatus[6]);
    //alert('index # : ' + _index + 'latlng : ' + lat + '-' + lon);
    var heading = Number(panoStatus[7]);
    
    var viewAngle = Number(panoStatus[8]);

    var changeAd = (lat != _lat || lon != _lon);
    _positionChanged = (_positionChanged || lat != _lat || lon != _lon  || heading != _heading  || viewAngle != _viewAngle);
    _lat = lat;
    _lon = lon;
    _heading = heading;
    _viewAngle = viewAngle;

    //alert('heading : ' + heading + '-- viewAngle : ' + viewAngle);
    
	//canSetPOIs();
    
    if (_urlChanged && _updateUrlTimer == null) {
    	/*
        if (_dotType == 0) 
        	writeCookie("CanPagesSV", _urlEncoded);
        updateUrl();
        */
    }
    //if (_dotsChanged && _updateDotsTimer == null) 
    //	updateDots();
    if (_positionChanged && _updatePositionTimer == null) 
    	updatePosition();
} 


function updateDots()
{
    _updateDotsTimer = null;
    if (showDots(_showDots)) {
    	return;
    }
    _updateDotsTimer = setTimeout("updateDots();", 500);
}
   
function updatePosition()
{
    _updateMapTimer = null;
    if (updateMap(_lat, _lon, _heading, _viewAngle)) {
    	return;
    }
    _updateMapTimer = setTimeout("updatePosition();", 500);
}

function getLatLon()
{
    return {x:_lon, y:_lat};
}

function canSetPOIs() {
    if (!_panoViewer) return false;

    var nearbyPois = mjStreetView.getNearByJack(_lat, _lon, 50);
    _panoViewer.setPOIs(nearbyPois);

    return true;
}

function setPOIs(rPois)
{
    if (!_panoViewer) return false;

    // Repack in new array. Bug in Flash
    var pois = [];
    if (rPois != null) { 
    	for (var i = 0; i < rPois.length; i++) {
    		pois.push(rPois[i]);
    	}
    }

    _panoViewer.setPOIs(pois);
    return true;
}

function updateUrl()
{
}

function writeCookie(name, value)
{
	if (value == null || name == null) return;
	document.cookie = name + "=" + escape(value) + '; expires=Thu, 11 Aug 2011 20:47:11 UTC; path=/';
}

// Reads a cookie from the browser
function readCookie(name)
{
    var cookieValue = "";
    var search = name + "=";
    if(document.cookie.length > 0)
    { 
        offset = document.cookie.indexOf(search);
        if (offset != -1)
        { 
            offset += search.length;
            end = document.cookie.indexOf(";", offset);
            if (end == -1) end = document.cookie.length;
            cookieValue = unescape(document.cookie.substring(offset, end))
        }
    }
    return cookieValue;
}

