// A function to create the marker and set up the event window
function createMarker(point, authorData, point_x, point_y)
{
    // HTML-Code fuer InfoWindow generieren
    var authorHtml = '';
    authorHtml += generateInfoWindowBegin();
    authorHtml += generateAuthorHtml(authorData);
    authorHtml += generateInfoWindowEnd();                    

    // AnE: benutzerdefiniertes Overlay
    // Beschriftung ist hier die Nummer des Fachbetriebs (beginnend bei 1)
    var markerLabel = (i+1);
    var iconOffset = getMarkerLabelOffset(1);            
    var marker = new authorMarker(point, { icon: Icon, authorText: markerLabel, authorClass: iconOffset.css, authorOffsetX: iconOffset.x, authorOffsetY: iconOffset.y, last_i: i, clickable: true});
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(authorHtml);
  });

  i++;
  
  return marker;
} // createMarker()

// Funktion, die HTML-Code fuers InfoWindow generiert (fuer einen Autor)
function generateAuthorHtml(authorData)        
{
    var authorHtml = '';
    
    authorHtml += '<div class="infoWindowPartnerContainer">';

    var line1 = '';

    if (authorData.name != '')
        line1 += authorData.name + ' ';
        
    if (line1 != '')
    {
        authorHtml += '<div class="infoWindowPartnerDataLine1 infoWindowSpacer">'+line1+'</div>';
    }
        
    // Adress-Teil
    // street, city, postal_code,country
    var address = '';
    if (authorData.street && authorData.street != '')
    {
        address += authorData.street;
    }
    var city_complete = '';
    if (authorData.postal_code && authorData.postal_code != '')
        city_complete = authorData.postal_code;
    if (authorData.city && authorData.city != '')
    {
        if (city_complete != '')
            city_complete += ' ';
        city_complete += authorData.city;
    }
    if (city_complete != '')
    {
        if (address != '')
            address += '<br>';
        address += city_complete;
    }
    if (authorData.country && authorData.country != '')
    {
        if (address != '')
            address += '<br>';
        address += authorData.country;
    }
    if (address != '')
    {
        authorHtml += '<div class="infoWindowSpacer">'+address+'</div>';
    }

    // Link zur Detailseite
    var strDetailsUrl = '';
    // nicht bei der Zoom-Ansicht ausgeben
    var intTestPathname = window.location.pathname.search(/zoom/);
    if (intTestPathname == -1)
    {
        strDetailsUrl += window.location.pathname;
        strDetailsUrl += '?partner_id='+authorData.id;
        // weitere Parameter
        if (qs_vcard != '')
            strDetailsUrl += qs_vcard;
    }

    if (strDetailsUrl != '')
        authorHtml += '<a href="'+strDetailsUrl+'">Details</a>';

    authorHtml += '</div>';
    
    return authorHtml;
} // generateAuthorHtml()

function generateInfoWindowBegin()
{
    var codeBegin = '<div class="infoWindow">';
    
    return codeBegin;
} // generateInfoWindowBegin()

function generateInfoWindowEnd()
{
    var codeEnd = '';
    codeEnd += '</div>';
    
    return codeEnd;
} // generateInfoWindowEnd()

// Funktion, die Versatz fuer Marker-Beschriftung ermittelt
// abhaengig von Marker-Icon-Groesse
function getMarkerLabelOffset(iconSize)
{
    var offsetX = 0;
    var offsetY = 0;
    var css = 'markerNumberOfPartners1';

    switch(iconSize)
    {
        case 1:
            offsetX = -6;
            offsetY = -37;
            css = 'markerNumberOfPartners1';
            break;
    } // switch

    var offsetObject =
    {
        x: offsetX,
        y: offsetY,
        css: css
    };
    
    return offsetObject;
} // getMarkerLabelOffset


//
// *** benutzerdefiniertes Overlay
//

function authorMarker(point, opt_opts)
{
    this.latlng_=point;
    this.opts_=opt_opts;

    this.authorClass_=opt_opts.authorClass||"markerNumberOfPartners1";
    this.authorOffsetX_=opt_opts.authorOffsetX||0;
    this.authorOffsetY_=opt_opts.authorOffsetY||0;
    this.authorText_=opt_opts.authorText||"";            
    this.clickable_=opt_opts.clickable||true;
    GMarker.apply(this,arguments)        
} // authorMarker()

authorMarker.prototype=new GMarker(new GLatLng(0,0));

authorMarker.prototype.initialize=function(map)
{
    GMarker.prototype.initialize.apply(this,arguments);
    this.map_=map;
    this.div_=document.createElement("div");
    this.div_.className=this.authorClass_;
    if (this.opts_.last_i)
    {
        var markerLabelId = 'markerLabel'+this.opts_.last_i;
        // ID (fuers Verstecken benoetigt)
        this.div_.id = markerLabelId;
    }

    this.div_.innerHTML=this.authorText_;
    this.div_.style.position="absolute";
    this.div_.style.cursor="pointer";
    map.getPane(G_MAP_MARKER_PANE).appendChild(this.div_);
    
    if(this.clickable_)
    {
        function addEvent(obj,event)
        {
            return function()
            {
                GEvent.trigger(obj,event)
            }
        }
        var additionalEvents = ['click','dblclick','mousedown','mouseup'];
        for(var i=0; i< additionalEvents.length; i++)
        {
                var eventName = additionalEvents[i];
                GEvent.addDomListener(this.div_, eventName, addEvent(this, eventName))
        }
    }            
}; // initialize()

authorMarker.prototype.redraw=function(force)
{
    GMarker.prototype.redraw.apply(this,arguments);
    this.redrawLabel_();
}; // redraw()

authorMarker.prototype.redrawLabel_=function()
{
    var p=this.map_.fromLatLngToDivPixel(this.latlng_);
    var z=GOverlay.getZIndex(this.latlng_.lat());
    this.div_.style.left=(p.x+this.authorOffsetX_)+"px";
    this.div_.style.top=(p.y+this.authorOffsetY_)+"px";
    this.div_.style.zIndex=z;
}; // redrawLabel_()

authorMarker.prototype.copy=function()
{
    return new authorMarker(this.latlng_,this.opts_)
}; // copy()

authorMarker.prototype.remove=function()
{
    GEvent.clearInstanceListeners(this.div_);
            
    if(this.div_.parentNode)
    {
        this.div_.parentNode.removeChild(this.div_);
    }
    this.div_=null;
    GMarker.prototype.remove.apply(this,arguments);
}; // remove()

//
// *** ENDE benutzerdefiniertes Overlay
//
