function funkyEvent() {
    alert('Klicked');
}

function setMap(options, hoboQueries) {

    /*
     * zoomToExtent for Clusterlayer
     */
    function zoomToClusterExtent(features) {
        var extent = new OpenLayers.Bounds();
        for(var i=0, lenf=features.length; i<lenf; i++) {
            var cluster = features[i].cluster;
            for(var j=0, lenc=cluster.length; j<lenc; j++) {
                var geometry = cluster[j].geometry;
                if (geometry) {
                    extent.extend(geometry.getBounds());
                }
            }
        }
        return extent;
    }

    /*
     * Zoom to dataLayer after Layer is loaded
     */
    function zoomToLayer(event) {
        dataLayer.events.unregister('featuresadded', dataLayer, zoomToLayer);
        /* teste, ob nur ein Feature
         * Spezialzoom
         * Locality:     mittleres Zoomlevel (2?)
         * Street:        zweitnähestes Zoomlevel (3?)
         * Housenumber:    nähestes Zoomlevel (4?) 
         */
        if (dataLayer.features.length == 1 && dataLayer.features[0].cluster.length == 1) {
            var position = new OpenLayers.LonLat(dataLayer.features[0].geometry.x, 
                                                 dataLayer.features[0].geometry.y);
            var attributes = dataLayer.features[0].cluster[0].attributes;
            
            switch(attributes.viaah_type) {
                case 'house_number':
                    map.setCenter(position, 4);
                    break;
                case 'street':
                    map.setCenter(position, 4);
                    break;
                case 'locality':
                    map.setCenter(position, 2);
                    break;
                default:
                    var extent = zoomToClusterExtent(dataLayer.features);
                    map.zoomToExtent(extent);
                    break;
            }
        } else {
            var extent = zoomToClusterExtent(dataLayer.features);
            map.zoomToExtent(extent);
        }
    }
    
    function unSelect(feature) {
        if (popup) map.removePopup(popup);
    }
    
    function createPopup(feature) {
        if (
            (options.poiPopup == true && feature.layer.name == 'Pois') ||
            (options.hoboPopup == true && feature.layer.name.substr(0,4) == 'Hobo')
        ) {
            popup = Mtco.Control.Popup(feature);
        }
    }
    
    /*
     * Event handling function
     */
    function doEvent(feature) {
        var func;
        var attributes;
        
        if (feature.cluster) {
            // einzelnes feature im cluster
            if (feature.attributes.count == 1 && feature.cluster[0].attributes.events) {
                
                attributes = feature.cluster[0].attributes;
                func = feature.cluster[0].attributes.events[options.evtType];
                
            // mehrere feature im cluster oder kein Event!
            // cluster-Event
            } else {
                attributes = [];
                for (var i=0; i < feature.attributes.count; i++) {
                    if (feature.cluster[i].attributes.events) {
                        if (options.evtType + "Cluster" in feature.cluster[i].attributes.events && !func) {
                            func = feature.cluster[i].attributes.events[options.evtType + "Cluster"];
                        }
                        attributes.push(feature.cluster[i].attributes);
                    }
                }
            }
        // kein cluster
        } else if (feature.attributes.events) {
            attributes = feature.attributes;
            func = feature.attributes.events[options.evtType];
        }
        
        if (func) {
            createPopup(feature);
            eval(func + "(attributes)");
        }
    }
    
    /*
     * Variablen
     */
    var popup;
    var selectableLayer = [];
    
    /*
     * AJAX Definitionen
     */
    var serverUrl = 'http://www.gis-hosting.lu/viaah/query';
    var proxyUrl = '/static/proxy.php?url=';
    OpenLayers.ProxyHost = proxyUrl;
    
    
    /*
     * Karte & Controls
     */
    var map = Mtco.Viaah.Map(options);
    map.addControl(new OpenLayers.Control.Navigation({'zoomWheelEnabled' : false}));
    map.addControl(Mtco.Control.ViaahZoomPanel());
    
    /*
     * Layer Definitionen
     */
    var background = Mtco.Layer.Viaah.Background();
    map.addLayer(background);
    if ('query' in options) {
        var dataLayer = Mtco.Layer.Viaah.ClusterPois(options.query);
        map.addLayer(dataLayer);
    }
    // map.addLayer(Mtco.Layer.Viaah.Label());
    // map.addLayer(Mtco.Layer.Viaah.LabelFull());
    
    /*
     * Hobos
     */
    for (var h=0, l=hoboQueries.length; h < l; h++) {
        var hl = Mtco.Layer.Viaah.ClusterHobos(hoboQueries[h][0], hoboQueries[h][1]);
        map.addLayer(hl);
        selectableLayer.push(hl);
    }

    
    if ('query' in options) {
        dataLayer.events.register('featuresadded', dataLayer, zoomToLayer);
        selectableLayer.push(dataLayer);
        
        if ('evtType' in options && options.evtType == 'hover') {
            var hoverSelect = Mtco.Control.SelectFeatureHover(selectableLayer, doEvent, unSelect);
            map.addControl(hoverSelect);
        } else {
            options.evtType = 'click';
            var clickSelect = Mtco.Control.SelectFeatureClick(selectableLayer, doEvent, unSelect);
            map.addControl(clickSelect);
        }
    } else if ('lon' in options) {
        // check if hobopopup is enabled even if there are no query pois in map
        if ('hoboPopup' in options && options.hoboPopup == true) {
            if ('evtType' in options && options.evtType == 'hover' && selectableLayer.length > 0) {
                var hoverSelect = Mtco.Control.SelectFeatureHover(selectableLayer, doEvent, unSelect);
                map.addControl(hoverSelect);
            } else if (selectableLayer.length > 0) {
                options.evtType = 'click';
                var clickSelect = Mtco.Control.SelectFeatureClick(selectableLayer, doEvent, unSelect);
                map.addControl(clickSelect);
            }
        }
        map.setCenter(new OpenLayers.LonLat(options.lon, options.lat), options.zoom);
    }

	/*
	if (console && console.log) {
		var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
		renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
		console.log(renderer);
	}
	*/
    
    return [map, popup];
}

