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

var _startPosition = "";
//var _startPosition = "";
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 _urlChanged = true;
var _positionChanged = true;
var _dotsChanged = true;

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

var panoramaLoaded = false;

// Initialize, jump to tiny URL location if any
function panoramaLoad()
{

    if (!document["MapJackGUI"])
    {
        setTimeout("panoramaInit()", 1000);
        return;
    }
    
    //var code = readCookie("startPos");
    //if (code && code != "") MapJackGUI.navigateToEncoded(code);
    //else MapJackGUI.navigateToEncoded(_startPosition);

    if (_startPosition && _startPosition != "") document["MapJackGUI"].navigateToEncoded(_startPosition);
    else document["MapJackGUI"].navigateToEncoded("zuxRUCRrkcHE");
    
    //document["MapJackGUI"].focus();
    
    // Check tiny URL
    if (parent)
    {
        var hrefParts = parent.location.href.split('?');
        if (hrefParts.length != 2) hrefParts = parent.location.href.split('#');
        if (hrefParts.length == 2)
        {
            var urlEncoded = hrefParts[1];
            if (_urlEncoded != urlEncoded)
            {
                _urlEncoded = urlEncoded;
                document["MapJackGUI"].navigateToEncoded(urlEncoded);
            }
        }
    }
    
    panoramaLoaded = true;
}

// Calls a function in any frame
function panoramaCall(name)
{
    var func = window[name];
    if (!func && parent)
    {
        for (var i = 0; i < parent.frames.length; i++)
        {
            func = parent.frames[i][name];
            if (func) break;
        }
    }
    if (func) return func(arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);
    else return null;    
}

// Navigate to lat, lon
function navigateTo(lat, lon, defaultHeading)
{

    document["MapJackGUI"].navigateTo(lat, lon, defaultHeading);
}

// Navigate to encoded lat, lon
function navigateToEncoded(code)
{
    document["MapJackGUI"].navigateToEncoded(code);
}

function turnTo(heading)
{
    document["MapJackGUI"].turnTo(heading);
}

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

    // 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]);
    var lat = Number(panoStatus[5]);
    var lon = Number(panoStatus[6]);
    var heading = Number(panoStatus[7]);
    var viewAngle = Number(panoStatus[8]);
    _positionChanged = (_positionChanged || lat != _lat || lon != _lon  || heading != _heading  || 
            viewAngle != _viewAngle);
    _lat = lat;
    _lon = lon;
    _heading = heading;
    _viewAngle = viewAngle;

    if (_urlChanged && _updateUrlTimer == null)
    {
        if (_dotType == 0) writeCookie("startPos", _urlEncoded);
        updateUrl();
    }
    if (_dotsChanged && _updateDotsTimer == null) updateDots();
    if (_positionChanged && _updatePositionTimer == null) updatePosition();
} 

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;
}

function updateUrl()
{
    _updateUrlTimer = null;
    if (panoramaCall("updateLocationLink", _urlEncoded)) return;
    _updateUrlTimer = setTimeout("updateUrl();", 500);
}

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

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