﻿var loadedCategories = new Array();
var ecMap = null;
var LAST_BNR = null;

// Fuer Detail-Result-Karte
function loadECMap(controlId, point, bnr)
{
    LAST_BNR = bnr;
    
    if( eContent.Map.prototype.GetFullscreenLinkOrig == null )
    {
        eContent.Map.prototype.GetFullscreenLinkOrig = eContent.Map.prototype.GetFullscreenLink;
        eContent.Map.prototype.GetFullscreenLink = function()
        {
            var link = this.GetFullscreenLinkOrig();
            if( LAST_BNR != null )
                link += "&betriebsnummer=" + LAST_BNR;
            return link;
        }
    }

    if( $get(controlId) != null ) 
    {       
        Array.clear(loadedCategories);
        if( ecMap != null && !ecMap.gMap )
            ecMap.Dispose();
        ecMap = new eContent.Map(controlId);
        ecMap.UseRequestQueue(true);
        ecMap.LoadMap();

		//hack for some problem with google maps the second+ time regarding mapstyle mapping t vs terrain etc.
		if (MAP_SETTINGS && ecMap._mapStyleMapping)
			MAP_SETTINGS.MapStyle = ecMap._mapStyleMapping.Convert(MAP_SETTINGS.MapStyle);

        ecMap.SetPopupOnHover(false);
        ecMap.SetSinglePopupHandler(OnSinglePopup);

        var shape = ecMap.CreatePinShape(point, eContent.PinType.Hotel);
        ecMap.AddShape(shape);
        ecMap.SetCenterAndZoom(point,14);
    }
    else
    {
        if( ecMap != null && !ecMap.gMap )
            ecMap.Dispose();
    }
}

function OnSinglePopup(pinData)
{
    var isHotel = pinData.ContentId == "" + eContent.PinType.Hotel;
    if( isHotel )
    {
        var html = "<div id='marker" + pinData.LocalId + "' style='height: 150px' />";
        ResultService.GetInfoWindows( pinData.LocalId, OnGetInfoWindowSuccess, null, pinData.LocalId );
        return html;
    }
    
    var html = "<table>";
    if( pinData.Link != "" )
    {
        html += "<tr style=\"cursor:pointer;\" onclick=\"window.open('" + pinData.Link + "');\">";
        html += "<td colspan='2'><a href=\"" + pinData.Link + "\"><b>" + pinData.Title + " </b></a>";    
    }
    else
        html += "<tr><td colspan='2'><b>" + pinData.Title + " </b>"; 
    html += "<br /><span>" + GetThemaText( pinData ) + "</span></td></tr>";
	html += "<tr><td colspan='2'>" + pinData.Details + "</td><tr>";   
    if( pinData.Link != "" )
    {
        html += "<tr><td colspan='2'>&nbsp;</td></tr>"; 
        html += "<tr><td valign='top' align='right'><img src='http://maps.b-es.de/images/details.gif' /></td>";
        html += "<td valign='top' align='left'><a href='" + pinData.Link + "' target='_blank' >Details zu diesem Punkt</a></td></tr>";
    }
    html += "</table>";   
    return html;
}

function GetThemaText( pinData )
{
    var text = "";
    switch( pinData.ContentId )
    {
        case "1": text += "Gastgeber"; break;
        case "2": text += "Veranstaltung"; break;
        case "3": text += "Gastronomie"; break;
        case "4": text += "Tour"; break;
        case "5": text += "Sehensw&uuml;rdigkeit"; break;
    }
    return text + " (" + pinData.Category + ")";
}

function OnGetInfoWindowSuccess( html, id )
{
    var element = $get('marker' + id);
    if( element != null )
        element.innerHTML = html
    else // Workaround: Falls das Element noch nicht generiert wurde (sporadisch)
        ResultService.GetInfoWindows( id, OnGetInfoWindowRetrySuccess, null, id ); 
}

function OnGetInfoWindowRetrySuccess( html, id )
{
    var element = $get('marker' + id);
    if( element != null )
        element.innerHTML = html;     
}

function UpdatePins(controlId)
{
    var containerRef = $get(controlId);
    var inputRefArray = containerRef.getElementsByTagName('input');
    
    var rc = true;
    for (var i=0; i<inputRefArray.length; i++)
    {
        var inputRef = inputRefArray[i];
        if ( inputRef.type.substr(0, 8) == 'checkbox' )
            rc &= SetPinsEnabled( i, inputRef.checked );
    }
    if( rc )
        ecMap.UpdatePins();
}

function SetPinsEnabled( item, enabled )
{
    var rc = true;
    switch( item )
    {
        case 0:
            rc = LoadThema( eContent.PinType.Event, enabled );
            if( !rc ) ecMap.LoadEvents();
            break;
        case 1:
            rc = LoadThema( eContent.PinType.Gastro, enabled );
            if( !rc ) ecMap.LoadGastros();
            break;
        case 2:
            rc = LoadThema( eContent.PinType.Tour, enabled );
            if( !rc ) ecMap.LoadTouren();
            break;
        case 3:
            rc = LoadThema( eContent.PinType.POI, enabled );
            if( !rc ) 
            {
                ecMap.EnableAllPOICategories();
                ecMap.LoadPOI();
            }
            break;                        
            
    }
    return rc;
}

function LoadThema( pinType, enabled )
{
    var rc = true;
    ecMap.SetPinsEnablement( pinType, enabled );
    if( enabled )
    {
        rc = Array.contains(loadedCategories, pinType);
        if( !rc )
            Array.add(loadedCategories, pinType);
    }
    return rc;
}
