// =============================================================================
// (c) 2008 MapJack.com
// Author: Bjorn Moren. bjorn@mapjack.com
// =============================================================================

var _panoViewer = 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 _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;
var address="";
var code="kEqwTrVsWc7C";
// Initialize, jump to tiny URL location if any
function panoramaLoad()
{
    _panoViewer = document["MapJackGUI"];
	
    if (!_panoViewer)
    {
        setTimeout("panoramaLoad()", 1000);
	return;
    }
    
    // Default start pos
   

    // Check cookie
    var cookieCode = readCookie("JasmineZee");
    if (cookieCode && cookieCode != "") code = cookieCode;

    // Check query string
    if (parent)
    {
        if (parent.parent)
        {
            var hrefParts = parent.parent.location.href.split('?');
            if (hrefParts.length != 2) hrefParts = parent.parent.location.href.split('#');
            if (hrefParts.length == 2)
            {
                var urlEncoded = hrefParts[1];
                _urlEncoded = urlEncoded;
                code = urlEncoded;
            }
        }
    }

    // Navigate
	//navigate();
	_panoViewer.navigateToEncoded(code);    
		_panoViewer.focus();
   
    var pois = [];
    if (_cities)
    {
        for (var i = 0; i < _cities.length; i++)
        {
            if (!_cities[i].pois) continue;
            for (var j = 0; j < _cities[i].pois.length; j++)
            {
                pois[pois.length] = _cities[i].pois[j];
            }
        }
    }
    
    // Start ad rotation
    //displayAd();
    
    panoramaLoaded = true;
}
function navigate()
{
	try
	{

		_panoViewer.navigateToEncoded(code);    
		_panoViewer.focus();
	}
catch(e)
	{
		setTimeout("navigate",1000);
	}
}

function StartPOSVal(val)
	{
		alert(val);
	}
// Calls a function in any frame
function panoramaCall(name)
{
    var appFrames = [];
    panoramaGetFrames(window.top, appFrames);
    for (var i = 0; i < appFrames.length; i++)
    {
        var func = appFrames[i][name];
        if (func) return func(arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);
    }
    return null;    
}
function showaddress(address)
{
	//if(address==null)address=" Värtavägen 41, 11538 Stockholm, Sweden";
	_panoViewer.showaddress(address);
		
}
function panoramaGetFrames(win, arr)
{
    arr.push(parent.parent.frames["content"]);
    arr.push(parent.parent.frames["map"]);
    arr.push(parent.frames["panorama"]);
    return;


    if (win != window.top) arr[arr.length] = win;
    for (var i = 0; i < win.frames.length; i++)
       panoramaGetFrames(win.frames[i], arr);
}

// Navigate to lat, lon

function navigateTo(lat, lon, defaultHeading)
{
    _panoViewer.navigateTo(lat, lon, defaultHeading);
}

// Navigate to encoded lat, lon
function navigateToEncoded(code)
{
    _panoViewer.navigateToEncoded(code);
}
function showaddress(address)
{
	//if(address==null)address=" Värtavägen 41, 11538 Stockholm, Sweden";
	_panoViewer.showaddress(address);
		
}
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;

    // 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]);

    var changeAd = (lat != _lat || lon != _lon);
    _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("JasmineZee", _urlEncoded);
        updateUrl();
    }
    if (_dotsChanged && _updateDotsTimer == null) updateDots();
    if (_positionChanged && _updatePositionTimer == null) updatePosition();
    
    if (changeAd) displayAd();   
} 

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("updateCity")) 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};
}

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[i] = rPois[i];
    _panoViewer.setPOIs(pois);
    return true;
}

function displayAd()
{
    if (!_ads || !_shouldChangeAd) return;
    _shouldChangeAd = false;
    
    var now = new Date();
    var validAds = [];
    var totalWeight = 0;
    for (var i = 0; i < _ads.length; i++)
    {
        if (_lat >= _ads[i].lat1 && _lat < _ads[i].lat2 && _lon >= _ads[i].lon1 && _lon < _ads[i].lon2)
        {
            if (now >= _ads[i].start && now <= _ads[i].end && i != _currentAd)
            {
                validAds[validAds.length] = i;
                totalWeight += _ads[i].weight;
            }
        }
    }
    if (validAds.length > 0)
    {
        var pickedWeight = Math.floor(Math.random() * totalWeight) % totalWeight;
        
        for (var i = 0; i < validAds.length; i++)
        {
            var index = validAds[i];
            if (pickedWeight < _ads[index].weight) 
            {
                _currentAd = index;
                break;
            }
            pickedWeight -= _ads[index].weight;
        }
        parent.frames["banner"].location.href = _ads[_currentAd].page;
    }
    
    setTimeout("_shouldChangeAd = true;", 10000);
}

function flashMessage(msg)
{
    alert(msg);
}
