﻿var ecMap = null;
var ecMenu = null;
var ecPinLoader = null;
var ecPinPicker = null;
var lightMapAds = null;
var IMAGE_PATH = "light/images/";
var LOADER_IMG = "<img src='http://maps.hubermedia.de/images/ajax-loader.gif' />"
var currentResult = null;
var currentResultIndex = -1;
var emptyResultBackground = "";
var isFullscreenSet = false;

// Einrast-Zoomlevel setzen + Bottom-Menu-Zoomlevel (bis zu 5)
var ZOOM_LEVELS = [11, 14, 16]; // Nur aufsteigende Reihenfolge!
var zoomer = null;

function LoadECMapAPI()
{
    document.getElementById('ecMapContainer').innerHTML = LOADER_IMG;
    LazyApiLoader.Load(LoadECMap);
}

function LoadECMap()
{
    ecMap = new eContent.Map('ecMapContainer');
    ecMap.LoadMap();
    ecMap.EnableAllPOICategories();
    ecMap.SetPopupOnHover(false);
    ecMap.HideDashboard();
    ecMap.SetTimedOutListener(OnTimedOut);
    ecMap.SetSuppressLinks(true); 
    
    InitMapStyle(ecMap); // Dynamisch generiert

    ecMenu = new eContent.LightMenu(ecMap);
    ecMap.SetSuppressLinks(true);
    CreateMenuItems();
    CreateCrossHair();

    zoomer = new eContent.ZoomInParts(ecMap);
    zoomer.SetLevels(ZOOM_LEVELS); // Einrast-Zoomlevel setzen
    
    ecPinLoader = new eContent.PinLoader(ecMap);
    
    ecPinHandler = new eContent.VisiblePinHandler(ecMap);
    ecPinHandler.SetBeforeWait(BeforeWaitVisiblePinData);
    ecPinHandler.SetCallback(OnGetVisiblePinData);
    ecPinHandler.SetMaxCount(30);
    
    ecMap.SetSetupCompleteHandler(OnSetupComplete); 
}

function OnSetupComplete() 
{
    Setup(); // Dynamisch generiert
    ecPinHandler.Start();
}

function ShowHashLink(hashLink) 
{
    ecMap.ShowHashLink(hashLink, OnHashLinkLoaded);
}

function OnHashLinkLoaded(pinData) 
{
    if (pinData == null)
        return;

    if (pinData.ContentId == eContent.PinType.Tour)
        ecMap.AddLoadCompleteHandler(MoveToCurrentTour);
    else
        ecMap.MoveToPinData(pinData, 15);
} 

function MoveToCurrentTour()
{
    ecMap.MoveToCurrentTour();
}

function BeforeWaitVisiblePinData()
{
    $get('result').innerHTML = LOADER_IMG;
}

function OnGetVisiblePinData(data)
{
    $get('result').innerHTML = "";
    if (data == null)
        return;

    currentResult = data;
    currentResultIndex = -1;

    var info = "<tr><td class='resultInfo'>";
    if (data.length == ecMap.GetVisiblePinDataCount())
        info += "Ergebnis: " + ecMap.GetVisiblePinDataCount() + " Inhalte";
    else if (data.length > 0)
        info += "Ergebnis: " + data.length + " von insg. " + ecMap.GetVisiblePinDataCount() + " Inhalten";
    info += "</td></tr>";

    var text = "<table class='resultTable'>";
    text += "<thead>" + info + "</thead>";
    text += "<tbody>";
    for (var i = 0; i < data.length; i++)
    {
        var pinData = data[i];
        var onClick = "onclick=\"ShowResult(" + i + ");\"";
        text += "<tr><td class='resultCellInactive' id='resultField" + i + "' " + onClick + "><div class='resultCell'>";
        text += "<table><tr><td>" + ecMap.GetCategoryImage(pinData) + "</td><td>" + pinData.Title;
        if (pinData.Category != "")
            text += "<br/><span class='resultCellCategory'>" + pinData.Category + "</span>";
        text += "</td></tr></table>";
        text += "</td></tr>";
    }
    text += "</tbody>";
    //text += "<tfoot>" + info + "</tfoot>";
    text += "</table>";
    if (data.length > 0)
    {
        $get('result').innerHTML = text;
        //ShowResult(0);
    }
    else
    {
        $get('result').innerHTML = emptyResultBackground;
    }

}

function ShowResult(index)
{
    if (currentResultIndex != -1)
    {
        var oldRow = $get('resultField' + currentResultIndex);
        if (oldRow != null)
            oldRow.className = "resultCellInactive";
    }
    currentResultIndex = index;
    var row = $get('resultField' + index);
    var pinData = currentResult[index];
    if (row != null && pinData != null)
    {
        row.className = "resultCellActive";
        ecMap.ShowHashLink(pinData.HashLink);
    }
}

function MoveResultBy(inc)
{
    if (currentResult.length > 0)
    {
        var index = currentResultIndex;
        index += inc;
        if (index < 0)
            index = currentResult.length - 1;
        else if (index > currentResult.length - 1)
            index = 0;
        ShowResult(index);
        var interval = $get('result').scrollHeight / (currentResult.length + 2);
        $get('result').scrollTop = interval * index;
    }
}

function OnTimedOut() 
{
    window.location.reload();
}

function CreateCrossHair()
{
    var crosshair = document.createElement("img");
    crosshair.onload = function()
    {
        ecMap.AddUpdatingControl(crosshair, function(element)
        { 
            element.style.left = (ecMap.GetWidth() / 2 - element.offsetWidth / 2) + "px";
            element.style.top = (ecMap.GetHeight() / 2 - element.offsetHeight / 2 ) + "px";
        });    
    };
    crosshair.src = IMAGE_PATH + "kreuz.png";
}

function SetLogo(logoSrc)
{
    $get('header').innerHTML = "<p>&nbsp;</p><img class='headerImage' src='" + logoSrc + "' />";
}

function SetResultBackground(bgSrc)
{
    emptyResultBackground = "<img class='emptyResultImage' src='" + bgSrc + "' />"
}

function SetMyPosition(lat, lon)
{
    var position = new VELatLong(lat, lon);
    var shape = new VEShape(VEShapeType.Pushpin, position);
    var image = 'light/images/standort.png';
    var text = "<div style=\"background:url('" + image + "') no-repeat 0 0;"
    text += "height:56px;width:58px;";
    if (ecMap.IsIE6)
        text += "FILTER:expression(fixPNG(this));";
    text += "position:relative;top:-15px;left:-16px;\">";
    shape.SetCustomIcon(text);

    var myPosLayer = new VEShapeLayer();
    myPosLayer.AddShape(shape);
    ecMap.AddShapeLayer(myPosLayer);
    
}

function CreateMenuItems()
{       
    // Menu-Item: Gastgeber
    ecMenu.Gastgeber = new eContent.LightMenuItem(ecMenu);
    ecMenu.Gastgeber.ActiveIcon = IMAGE_PATH + "t_gastgeber_1.png";
    ecMenu.Gastgeber.InactiveIcon = IMAGE_PATH + "t_gastgeber_0.png";
    ecMenu.Gastgeber.Left = 10;
    ecMenu.Gastgeber.Top = 10;
    ecMenu.Gastgeber.ActiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.Hotel, true ); }
    ecMenu.Gastgeber.InactiveAction = function() { ecPinLoader.SetEnabled( eContent.PinType.Hotel, false ); }

    // Menu-Item: Veranstaltungen
    ecMenu.Events = new eContent.LightMenuItem(ecMenu);
    ecMenu.Events.ActiveIcon = IMAGE_PATH + "t_events_1.png";
    ecMenu.Events.InactiveIcon = IMAGE_PATH + "t_events_0.png";
    ecMenu.Events.RelativeItem = ecMenu.Gastgeber;
    ecMenu.Events.Top = 100; 
    ecMenu.Events.ActiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.Event, true ); }
    ecMenu.Events.InactiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.Event, false ); }    
    
    // Menu-Item: Gastronomie
    ecMenu.Gastro = new eContent.LightMenuItem(ecMenu);
    ecMenu.Gastro.ActiveIcon = IMAGE_PATH + "t_gastro_1.png";
    ecMenu.Gastro.InactiveIcon = IMAGE_PATH + "t_gastro_0.png";
    ecMenu.Gastro.RelativeItem = ecMenu.Events;
    ecMenu.Gastro.Top = 100;
    ecMenu.Gastro.ActiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.Gastro, true ); }
    ecMenu.Gastro.InactiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.Gastro, false ); }
    
    // Menu-Item: Touren
    ecMenu.Touren = new eContent.LightMenuItem(ecMenu);
    ecMenu.Touren.ActiveIcon = IMAGE_PATH + "Touren_1.png";
    ecMenu.Touren.InactiveIcon = IMAGE_PATH + "Touren_0.png";
    ecMenu.Touren.RelativeItem = ecMenu.Gastro;
    ecMenu.Touren.Top = 100; 
    ecMenu.Touren.ActiveAction = function() { ecPinLoader.SetEnabled( eContent.PinType.Tour, true ); }
    ecMenu.Touren.InactiveAction = function(){ ecMap.SetTourLayerVisible(false); ecPinLoader.SetEnabled( eContent.PinType.Tour, false ); }
    
    // Menu-Item: POI
    ecMenu.POI = new eContent.LightMenuItem(ecMenu);
    ecMenu.POI.ActiveIcon = IMAGE_PATH + "POI_1.png";
    ecMenu.POI.InactiveIcon = IMAGE_PATH + "POI_0.png";
    ecMenu.POI.RelativeItem = ecMenu.Touren;
    ecMenu.POI.Top = 100;
    ecMenu.POI.ActiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.POI, true ); }
    ecMenu.POI.InactiveAction = function(){ ecPinLoader.SetEnabled( eContent.PinType.POI, false ); }  


    // Menu-Item: Strassen-Ansicht
    ecMenu.Road = new eContent.LightMenuItem(ecMenu);
    ecMenu.Road.IsRadio = true;
    ecMenu.Road.ActiveIcon = IMAGE_PATH + "n_street_1.png";
    ecMenu.Road.InactiveIcon = IMAGE_PATH + "n_street_0.png";
    ecMenu.Road.Left = 120;
    ecMenu.Road.Top = 10;
    ecMenu.Road.ActiveAction = function(){ ecMap.SetMapStyle( eContent.MapStyle.Shaded ); };
    
    // Menu-Item: Karten-Ansicht
    ecMenu.Topo = new eContent.LightMenuItem(ecMenu);
    ecMenu.Topo.IsRadio = true;
    ecMenu.Topo.ActiveIcon = IMAGE_PATH + "n_topo_1.png";
    ecMenu.Topo.InactiveIcon = IMAGE_PATH + "n_topo_0.png";
    ecMenu.Topo.RelativeItem = ecMenu.Road;
    ecMenu.Topo.Left = 100; 
    ecMenu.Topo.ActiveAction = function(){ ecMap.SetMapStyle( eContent.MapStyle.Topo ); };
    
    // Menu-Item: Luftbild-Ansicht
    ecMenu.Aerial = new eContent.LightMenuItem(ecMenu);
    ecMenu.Aerial.IsRadio = true;
    ecMenu.Aerial.ActiveIcon = IMAGE_PATH + "n_aerial_1.png";
    ecMenu.Aerial.InactiveIcon = IMAGE_PATH + "n_aerial_0.png";
    ecMenu.Aerial.RelativeItem = ecMenu.Topo;
    ecMenu.Aerial.Left = 100; 
    ecMenu.Aerial.ActiveAction = function(){ ecMap.SetMapStyle( eContent.MapStyle.Hybrid ); };
    
    // Menu-Item: Zoom-Out
    ecMenu.ZoomOut = new eContent.LightMenuItem(ecMenu);
    ecMenu.ZoomOut.IsToggle = false;
    ecMenu.ZoomOut.ActiveIcon = IMAGE_PATH + "n_zoomout_0.png";
    ecMenu.ZoomOut.InactiveIcon = IMAGE_PATH + "n_zoomout_0.png";
    ecMenu.ZoomOut.ActiveAction = function(){ ecMap.ZoomOut(); };

    ecMenu.ZoomLevels = new Array();
    for (var i = 0; i < ZOOM_LEVELS.length; i++)
    {
        var menuItem = new eContent.LightMenuItem(ecMenu);
        menuItem.Group = "ZoomLevelButtons";
        menuItem.IsRadio = true;
        menuItem.ActiveIcon = IMAGE_PATH + "z_" + (i + 1) + "_1.png";
        menuItem.InactiveIcon = IMAGE_PATH + "z_" + (i + 1) + "_0.png";
        menuItem.ZoomLevel = ZOOM_LEVELS[i];
        menuItem.ActiveAction = function() { ecMap.SetZoomLevel(this.ZoomLevel); };
        if (i > 0)
        {
            menuItem.RelativeItem = ecMenu.ZoomLevels[i - 1];
            menuItem.Left = 90;
        }
        else
        {
            menuItem.RelativeItem = ecMenu.ZoomOut;
            menuItem.Left = 55;
        }
        ecMenu.ZoomLevels[i] = menuItem;
    }

    // Menu-Item: Zoom-In
    ecMenu.ZoomIn = new eContent.LightMenuItem(ecMenu);
    ecMenu.ZoomIn.IsToggle = false;
    ecMenu.ZoomIn.ActiveIcon = IMAGE_PATH + "n_zoomin_0.png";
    ecMenu.ZoomIn.InactiveIcon = IMAGE_PATH + "n_zoomin_0.png";
    ecMenu.ZoomIn.RelativeItem = ecMenu.ZoomLevels[ZOOM_LEVELS.length-1];
    ecMenu.ZoomIn.Left = 90;
    ecMenu.ZoomIn.ActiveAction = function() { ecMap.ZoomIn(); };

    ecMenu.BeforeUpdate = function()
    {
        ecMenu.Gastgeber.Top = ecMap.GetHeight() / 2 - 240;
        ecMenu.Road.Left = ecMap.GetWidth() / 2 - 135;
        ecMenu.ZoomOut.Left = ecMap.GetWidth() - 100;
        ecMenu.ZoomOut.Left = ecMap.GetWidth() / 2 - ecMenu.ZoomLevels.length * 45 - 45;
        ecMenu.ZoomOut.Top = ecMap.GetBottom() - 100;
    }

    if (Init != null)
        Init();

	SetFullscreen("72%", "100%");	
		
    ecMenu.Create();

    ecMap.AttachEvent("onendzoom", UpdateZoomLevelMenu);
    UpdateZoomLevelMenu(); 
    
    if( ecMap.GetMapStyle() == eContent.MapStyle.Shaded )
        ecMenu.Road.SetActive(true);
    else if( ecMap.GetMapStyle() == eContent.MapStyle.Topo )
        ecMenu.Topo.SetActive(true);
    else if( ecMap.GetMapStyle() == eContent.MapStyle.Hybrid )
        ecMenu.Aerial.SetActive(true);
}

function Action_PrevResult() {
    MoveResultBy(-1);
}

function Action_NextResult() {
    MoveResultBy(1);
}

function Action_ZoomIn() {
    zoomer.ZoomIn();
}

function Action_ZoomOut() {
    zoomer.ZoomOut();
}

function Action_MoveUp() {
    ecMap.Pan(0, -50);
}

function Action_MoveDown() {
    ecMap.Pan(0, 50);
}

function Action_MoveLeft() {
    ecMap.Pan(-50, 0);
}

function Action_MoveRight() {
    ecMap.Pan(50, 0);
}

function Action_NextMapStyle() 
{
    var currentMapStyle = ecMap.GetMapStyle();
    if (currentMapStyle == eContent.MapStyle.Shaded)
        ecMenu.Topo.OnClick();
    else if (currentMapStyle == eContent.MapStyle.Topo)
        ecMenu.Aerial.OnClick();
    else
        ecMenu.Road.OnClick();  
}

function Action_PrevMapStyle() 
{
    var currentMapStyle = ecMap.GetMapStyle();
    if (currentMapStyle == eContent.MapStyle.Shaded)
        ecMenu.Aerial.OnClick();
    else if (currentMapStyle == eContent.MapStyle.Hybrid)
        ecMenu.Topo.OnClick();
    else
        ecMenu.Road.OnClick(); 
}

function UpdateZoomLevelMenu()
{
    var index = Array.indexOf(ZOOM_LEVELS, ecMap.GetZoomLevel());
    if (index != -1)
        ecMenu.ZoomLevels[index].SetActive(true);
    else
        ecMenu.DeactivateRadioGroup("ZoomLevelButtons");
}

function SetFullscreen(width, height, left, top)
{
	if(!isFullscreenSet)
		ecMap.SetFullscreen(true, width, height, left, top);
	isFullscreenSet = true;
}

