AdvicesMapHandler.prototype = new GenericMapHandler();
function AdvicesMapHandler(defaultErrorText, canvasId, zoomLevel, largeControl,
        baseUrl, iconsPath, scrollToID, labels, avoidShowLink) {
    CallParentConstructor(this, GenericMapHandler, defaultErrorText, canvasId, zoomLevel, largeControl, false);

    this.baseUrl = baseUrl;
    this.iconsPath = iconsPath;
    this.scrollToID = scrollToID;
    this.labels = labels;
    this.avoidShowLink = avoidShowLink;

    this.markers = new Array();

    $(canvasId).mapHandler = this;
}

AdvicesMapHandler.prototype.update = function() {
    
}

AdvicesMapHandler.prototype.getIcon = function() {
    return null;
}

AdvicesMapHandler.prototype.setMarkers = function(markersInfo, avoidRecenter) {
    //this.reset();
    var markers = new Array();

    if(typeof(markersInfo.tipo_contenuto)!="undefined"){
        var customIcon = new google.maps.Icon();
        customIcon.image = this.iconsPath + "/images/icone/iconaFiltro-happening-map.png";
        customIcon.iconAnchor = new GPoint(2, 15);
        customIcon.infoWindowAnchor = new GPoint(25, 1);

        var opts = {
            title : markersInfo.title,
            icon : customIcon
        };

        var marker = new EventMarker(this.defaultErrorText, markersInfo, opts, true, this.labels, this.avoidShowLink);
        markers.push(marker);



    }else{

        for(var i = 0; i < markersInfo.length; i++) {
            var info = markersInfo[i];

            var customIcon = new google.maps.Icon();
            customIcon.image = this.iconsPath + "/images/icone/iconaFiltro-advices-map.png";
            if(info.type == 'ricetta') {
                customIcon.image = this.iconsPath + "/images/icone/iconaFiltro-recipes-map.png";
                customIcon.iconSize = new GSize(30,30);
            }else {
                customIcon.iconSize = new GSize(30,30);
            }

            if(info.type == 'events') {
                customIcon.image = this.iconsPath + "/images/icone/iconaFiltro-events-map.png";
                customIcon.iconSize = new GSize(30,30);
            }

            //customIcon.shadowSize = new GSize(50, 38);
            customIcon.iconAnchor = new GPoint(2, 15);
            customIcon.infoWindowAnchor = new GPoint(25, 1);

            var opts = {
                title : info.title,
                icon : customIcon
            };

            var marker = new AdviceMarker(this.defaultErrorText, info, opts, true, this.labels, this.avoidShowLink);
            markers.push(marker);
        }
    
    }

    if(markers.length != 0) {
        var ms = new MarkerSpreader(this.map);
        var markersArray = ms.spreadMarkers(markers);

        if(!avoidRecenter) {
            var bb = this.getBB(markersArray);
            this.map.setZoom(Math.max(this.map.getBoundsZoomLevel(bb) - 6, 5));
            this.map.panTo(bb.getCenter());
        }
        
        this.markers = markersArray;

        this.mgr.addMarkers(markersArray, 0);
        this.mgr.refresh();
    }
}

AdvicesMapHandler.prototype.getBB = function(markers) {
    var o = markers[0].getLatLng().lng();
    var e = markers[0].getLatLng().lng();
    var n = markers[0].getLatLng().lat();
    var s = markers[0].getLatLng().lat();
    for(var i = 1; i < markers.length; i++) {
        if(markers[i].getLatLng().lat() < s) s = markers[i].getLatLng().lat();
        if(markers[i].getLatLng().lat() > n) n = markers[i].getLatLng().lat();
        if(markers[i].getLatLng().lng() < o) o = markers[i].getLatLng().lng();
        if(markers[i].getLatLng().lng() > e) e = markers[i].getLatLng().lng();
    }
    return new google.maps.LatLngBounds(new google.maps.LatLng(s, o), new google.maps.LatLng(n, e));
}

AdvicesMapHandler.prototype.setLocation = function(lat, lng, south, east, north,
    west, text, avoidPopup, scrollAfterMarker) {

    //this.mgr.clearMarkers();
    var bounds = new google.maps.LatLngBounds(
        new google.maps.LatLng(south, west),
        new google.maps.LatLng(north, east)
    );
    var point = new google.maps.LatLng(lat, lng);

    var zoom = this.map.getBoundsZoomLevel(bounds) + 1;
    this.map.setCenter(point, zoom);

//    var opts = {title : (text ? text.replace(/(<([^>]+)>)/ig, "") : null), icon : this.getIcon()};
//    var marker = new PhotoMapMarker(
//            this.defaultErrorText, '',
//            {'location':text, 'lat':point.lat(), 'lng':point.lng()},
//            opts, avoidPopup);
//    this.mgr.addMarker(marker, 0);
//    this.mgr.refresh();

    if(text) {
        setTimeout(function() { marker.showPopup() }, 10);
    }

    if(scrollAfterMarker && this.scrollToID && $(this.scrollToID).viewportOffset().top < 0) {
        Effect.ScrollTo(this.scrollToID, {offset: 0});
    }
}

AdvicesMapHandler.prototype.relocate = function(locationObj) {
    //this.mgr.clearMarkers();
    if($(locationObj.district).value < 0 && $(locationObj.district).value < 0 &&
        $(locationObj.city).value < 0) {

        this.map.setCenter(RomePosition, this.defaultZoomLevel);
    }
    else {
        if($(locationObj.province).value == -1 || $(locationObj.city).value != -1) {
            this.setLocation($(locationObj.latitude).value, $(locationObj.longitude).value,
                $(locationObj.south).value, $(locationObj.east).value, $(locationObj.north).value,
                $(locationObj.west).value, null, true);
        }
    }
}

AdvicesMapHandler.prototype.showMarker = function(nid) {
    for(var i = 0; i < this.markers.length; i++) {
        var marker = this.markers[i];
        var info = marker.getMarkerInfo();
        if(info.nid == nid) {
            var bb = new google.maps.LatLngBounds(
                new google.maps.LatLng(info.bb[0], info.bb[3]),
                new google.maps.LatLng(info.bb[2], info.bb[1])
            );
            var zoom = Math.max(this.map.getBoundsZoomLevel(bb), 9);
            this.map.setCenter(marker.getLatLng(), zoom);
            if($(this.scrollToID).viewportOffset().top < 0) {
                Effect.ScrollTo(this.scrollToID, {offset: 0});
            }
            setTimeout(function() { marker.showPopup() }, 10);
            return;
        }
    }
}

