/**
*	JS/FLASH GATEWAY
*
*	Code by dCTRL
*	 
*	dCTRL - INTERACTIVE MEDIA & MOTION GRAPHICS GMBH
*	Konradstrasse 17, CH-8005 Zurich, Switzerland
*	Tel. 044-271 9828, info[at]dctrl[dot]ch, www.dctrl.ch
*	 
*	Copyright © 2000-2007 dCTRL - Switzerland. All Rights Reserved.
*	All content from this site may not be reproduced without prior 
*	written permission.
*	All characters, titles and plublication names on this site are 
*	the intellectual property of their respective owners/creators. 
*
*	Theme Name: 		FLASH MAP JAVASCRIPT
*	Theme URI: 			http://www.uemis.org
*	Description: 		-
*	Version: 			0.1
*	Erstellt:			20.09.2007
*	Geaendert:			20.09.2007
*	Author: 			Andreas Lorenz for dCTRL GmbH
*	Author URI: 		http://www.dctrl.ch
*
*
*	INFO ZU FIREBUG JS TRACER
*	
*	console.log('This is log message');  
*	console.debug('This is debug message');  
*	console.error('This is error message');  
*	console.info('This is info message');  
*	console.warn('This is warning message');
*
*/

/**
*	VARIABLES
*/
var swf_ID_Name = "flashGUI";	// ID Name des SWF Movies
var map;

/**
*	REGISTER SWF MOVIE
*	------------------------------------------------------------------
*/
function callActionScript(swfName) {
    if (navigator.appName.indexOf("Microsoft") != -1) return window[swfName]
    else return document[swfName]
}

/**
*	MAP VARS FUER BOOKMARKS
*	------------------------------------------------------------------
*/
var mapVars;

function setMapVars(inStr) { 
    mapVars = inStr;
    //alert(mapVars);
}

function getMapVars() {
    return mapVars;
}

/**
*	UPDATE AJAX DISPLAY
*	------------------------------------------------------------------
*/
function updateAjax(inStr) { 
    //alert(inStr);
    xajax_showMapData(inStr);
}

/**
*	INPUT HANDLERS
*	------------------------------------------------------------------
*/

// ***** START
function clickCenterHandler() {
	var cLat = document.getElementById("new_center_lat").value;
	var cLng = document.getElementById("new_center_lng").value;
	if (cLat && cLng) {
		var new_lat = parseFloat(cLat);
		var new_lng = parseFloat(cLng);
		map.setCenter(new GLatLng(new_lat,new_lng));
	}
}

// ---> New for Flash only
function clickCenterHandler_as(inLat, inLon) {
		var new_lat = parseFloat(inLat);
		var new_lng = parseFloat(inLon);
		map.setCenter(new GLatLng(new_lat,new_lng));
}
// ***** END

function clickPanHandler(d_lat, d_lng) 
{
	map.panDirection(d_lat,d_lng);
}

/**
*	PAN MAP
*	------------------------------------------------------------------
*/
function panMapTo(d_lat, d_lng) 
{
	map.panTo(new GLatLng(d_lat, d_lng));
}

/**
*	ZOOM
*	------------------------------------------------------------------
*/
function changeZoom(inZoom) 
{ 
    map.setZoom(parseInt(inZoom));
}

/**
*	MAP TYPE
*	------------------------------------------------------------------
*/
/*
function maptypechangedHandler() {
	callActionScript(swf_ID_Name).sendEvent("map_typechanged");
	
	var mapType = map.getCurrentMapType();
	var mType = '';
	
	if (mapType == G_SATELLITE_MAP) mType = 'Satellite';
	else if (mapType == G_HYBRID_MAP) mType = 'Hybrid';
	else if (mapType == G_NORMAL_MAP) mType = 'Map';
	else mType = '?';
	//document.getElementById("map_type").innerHTML = mType;
}
*/

function changeMaptype(inType) 
{
	var new_map_type;
	
	switch(inType) {
	    case 'map': new_map_type = G_NORMAL_MAP; break;
	    case 'satellite': new_map_type = G_SATELLITE_MAP; break;
	    case 'hybrid': new_map_type = G_HYBRID_MAP; break;
	    default: new_map_type = null;
	}
	
	if (new_map_type) map.setMapType(new_map_type);
	callActionScript(swf_ID_Name).sendEvent("map_typechanged");
}

/**
*	GET URL
*	------------------------------------------------------------------
*/
function getUrl() { }

/**
*	GET PIXEL FROM LATLONG
*	------------------------------------------------------------------
*/
function getPixelFromLatLon(inLat, inLon) 
{
	var pxPoint = new GPoint();
    var pxLatLon = new GLatLng(inLat, inLon);
    var d_Point = new GPoint();
    var d_LatLon = map.getBounds().getNorthEast(); //getSouthWest()
    
    var currentProjection = map.getCurrentMapType().getProjection();
    
    var pxPoint = currentProjection.fromLatLngToPixel(pxLatLon, map.getZoom());
    var d_Point = currentProjection.fromLatLngToPixel(d_LatLon, map.getZoom());
    
    var x = Math.abs(pxPoint.x - d_Point.x);
    var y = Math.abs(pxPoint.y - d_Point.y);
    
    callActionScript(swf_ID_Name).sendMapMath([x, y]);
}

/**
*	SAVE MAP POSITION
*	------------------------------------------------------------------
*/
function clickSavePositionHandler() { map.savePosition(); }

/**
*	RESTORE MAP POSITION
*	------------------------------------------------------------------
*/
function clickRestorePositionHandler() { map.returnToSavedPosition(); }

/**
*	ZOOM END HANDLER
*	------------------------------------------------------------------
*/
function zoomendHandler() 
{
	var zoom = map.getZoom();
	callActionScript(swf_ID_Name).sendEvent("map_zoomend");
	callActionScript(swf_ID_Name).sendMapData("map_zoom", [zoom, null]);
}

/**
*	MAP EVENT HANDLER
*
*   @description    Sends data to Flash after each map change
*	------------------------------------------------------------------
*/
function moveendHandler() 
{
	callActionScript(swf_ID_Name).sendEvent("map_moveend");
	
	// GET CENTER MAP (LAT, LON)
	var center = map.getCenter();
	callActionScript(swf_ID_Name).sendMapData("map_center", [center.lat(), center.lng()]);
	
    // GET BOUNDS (MIN LAT, MIN LON, MAX LAT, MAX LON)
	var bounds = map.getBounds();
	callActionScript(swf_ID_Name).sendMapData("map_bounds", [bounds.getSouthWest().lat(), bounds.getSouthWest().lng(), bounds.getNorthEast().lat(), bounds.getNorthEast().lng()]);
	
	// GET SPAN LAT/LON
	var span = bounds.toSpan();
	callActionScript(swf_ID_Name).sendMapData("map_span", [span.lat(), span.lng()]);

    // GET MAP TYPE
	var mapType = map.getCurrentMapType();
	var mType = '';
	if (mapType == G_SATELLITE_MAP) mType = 'satellite';
	else if (mapType == G_HYBRID_MAP) mType = 'hybrid';
	else if (mapType == G_NORMAL_MAP) mType = 'map';
	else mType = '?';
	callActionScript(swf_ID_Name).sendMapData("map_type", [mType, null]);
	
	// GET ZOOM
	var mZoom = map.getZoom();
	callActionScript(swf_ID_Name).sendMapData("map_zoom", [mZoom, null]);

    // GET GOOGLE LINK URL
	var linkStr = window._mHost + window._mUri + '?hl=' + _mHL + '&ll=' + center.lat() + ',' + center.lng() + '&spn=' + span.lat() + ',' + span.lng() + '&z=' + map.getZoom() + '&t=' + mType;
	callActionScript(swf_ID_Name).sendMapData("map_link", [linkStr, null]);
	
	// GET GOOGLE COPYRIGHT URL
	var mCopyrightUrl = window._mTermsUrl;
	callActionScript(swf_ID_Name).sendMapData("map_info", [mCopyrightUrl, null]);
}

/**
*	INIT OVERVIEW MAP
*	------------------------------------------------------------------
*/
function initBoundsMap(inMinLat, inMinLon, inMaxLat, inMaxLon, inType) 
{
    //alert("init --> flashMapGateway overview: "+inMinLat+" / "+inMinLon+" / "+inMaxLat+" / "+inMaxLon+" / "+inType);
    
    map = new GMap2(document.getElementById("map"));
    
    var bounds = new GLatLngBounds(new GLatLng(inMinLat, inMinLon), new GLatLng(inMaxLat, inMaxLon));
    
    var maxZoom = G_SATELLITE_MAP.getMaximumResolution(bounds.getCenter());
    var boundsZoom = map.getBoundsZoomLevel(bounds);
    var zoomLevel = (maxZoom < boundsZoom) ? maxZoom: boundsZoom;
    
    map.setCenter(bounds.getCenter(), zoomLevel);
    
    changeMaptype(inType);
	zoomendHandler();
	moveendHandler();

	GEvent.addListener(map, "moveend", moveendHandler);
	GEvent.addListener(map, "zoomend", zoomendHandler);
	//GEvent.addListener(map, "maptypechanged", maptypechangedHandler);
}

/**
*	INIT DETAIL MAP
*	------------------------------------------------------------------
*/
function initMap(inLat, inLon, inZoom, inType) 
{
	//alert("init --> flashMapGateway detail: "+inLat+" / "+inLon+" / "+inZoom+" / "+inType);
    
    map = new GMap2(document.getElementById("map"));
    
    var maxZoom = G_SATELLITE_MAP.getMaximumResolution(new GLatLng(inLat, inLon));
    var minZoom = G_SATELLITE_MAP.getMinimumResolution(new GLatLng(inLat, inLon));
    var zoomLevel = (maxZoom < inZoom) ? maxZoom: inZoom;
    
    var errMsg = G_SATELLITE_MAP.getErrorMessage();
    
    //alert ("minZoom: "+minZoom+" / maxZoom: "+maxZoom+" / inZoom: "+inZoom+" / errMsg: "+errMsg);
    
	map.setCenter(new GLatLng(inLat, inLon), zoomLevel);
	
    changeMaptype(inType);
	//maptypechangedHandler();
	zoomendHandler();
	moveendHandler();

	GEvent.addListener(map, "moveend", moveendHandler);
	GEvent.addListener(map, "zoomend", zoomendHandler);
	//GEvent.addListener(map, "maptypechanged", maptypechangedHandler);
}
