﻿
// !!!!!! Important there is also cluster js to be found in plugins.js
var data;

google.load('maps', '3', {
    other_params: 'sensor=false'
});


google.setOnLoadCallback(initialize);

var cat;
var markerClusterer = null;
var map = null;
var imageUrl = { 
    'art': 'pins/pin_art.png',
    'bar': 'pins/pin_bar.png',
    'cafe': 'pins/pin_cafe.png',
    'comedy': 'pins/pin_comedy.png',
    'dance': 'pins/pin_dance.png',
    'festival': 'pins/pin_festival.png',
	'more': 'pins/pin_more.png',
    'film': 'pins/pin_film.png',
    'food': 'pins/pin_food.png',
    'heritage': 'pins/pin_heritage.png',
    'music': 'pins/pin_music.png',
    'pub': 'pins/pin_pub.png',
    'theatre': 'pins/pin_theatre.png',
    'number':'pins/number.png'

};

var hasData = false;
var catCount;
var venueId;
var venueName;
var eventId;
var date;
var markers;
var marker;
var robinHood = null;


function refreshMap() {
    
    if (!hasData) {
     
        setTimeout('refreshMap()', 100);
        return;
    }

    hasData = false;

    if (markerClusterer) {
        markerClusterer.clearMarkers();
    }

    markers = [];

    var markerImage = new google.maps.MarkerImage(imageUrl,
    new google.maps.Size(24, 32));

    $.each(data, function (i, venue) {
        var latLng = new google.maps.LatLng(venue.Lat, venue.Long);
        venueId = venue.Id;
        venueName = venue.Name;
        if (venue.Event != undefined) {
            cat = venue.Event.Categories[0].Name;
            eventId = venue.Event.Id;
            date = venue.Event.Dates[0];
        }


        catCount = venue.Count;

      

        if (catCount > 1) {
            markerImage = imageUrl.number;
        }
        else if (catCount == 1) {
            switch (cat) {
                case 'Dance':
                    markerImage = imageUrl.dance
                    break;
                case 'Theatre':
                    markerImage = imageUrl.theatre
                    break;
                case 'Art':
                    markerImage = imageUrl.art
                    break;
                case 'Comedy':
                    markerImage = imageUrl.comedy
                    break;
                case 'Festivals':
                    markerImage = imageUrl.festival
                    break;
                case 'Film':
                    markerImage = imageUrl.film
                    break;
                case 'Heritage':
                    markerImage = imageUrl.heritage
                    break;
                case 'Music':
                    markerImage = imageUrl.music
                    break;
                case 'Food':
                    markerImage = imageUrl.food
                    break;
				case 'More':
                    markerImage = imageUrl.more
                    break;
                default:
                    markerImage = imageUrl.number
            }
        }
        else {
            if (venue.Category != undefined) {
                switch (venue.Category.Name) {
                    case 'Restaurant':
                        markerImage = imageUrl.food
                        break;
                    case 'Bar':
                        markerImage = imageUrl.bar
                        break;
                    case 'Cafe':
                        markerImage = imageUrl.cafe
                        break;
                    case 'Pub':
                        markerImage = imageUrl.pub
                        break;
                };
            }
        }
        marker = new google.maps.Marker({
            position: latLng,
            draggable: false,
            icon: markerImage,
            cat: cat,
            date: date,
            catCount: catCount,
            venueName: venueName,
            venueId: venueId,
            eventId: eventId,
            map: map
            // title: title
        });
        
         google.maps.event.addListener(marker, 'click', function () {
            
           
            pageView = 'map';
            popCat = this.cat;
            map.panTo(this.position);
            date = this.date;

            if (this.catCount <= 1) {
                $('.multipleEvents').remove();

                var formatDate = stripDate(date);
                thisEventId = this.eventId;
                var globalOps = {
                    unformattedDate: formatDate,
                    date: formatDate.format('dS M Y'),
                    cat: popCat
                }
               

                requestInfoPop(this.eventId, globalOps);
            }
            else if (this.catCount > 1) {
                $('.multipleEvents').remove();
                $("div.singleEvent").remove();
                
                
                showMultiplePop('venues', { venueId: this.venueId } );
                
                pageView = 'map';
            }
            else {
                $('.multipleEvents').remove();
                $("div.singleEvent").remove();
                var globalOps = {
                    VenId: this.venueId,
                    VenName: this.venueName
                }

                requestVenuePop(globalOps);
                pageView = 'map';
            }

            $("div.eventCloud").remove();

            google.maps.event.addListener(map, "dragstart", hideMessage);
            function hideMessage() {
                $("div.eventCloud").remove();
            }
        });

        markers.push(marker);
       
    });


    markerClusterer = new MarkerClusterer(map, markers, {});
    markerClusterer.maxZoom_ = 16;

  }

function initialize() {
    
    if (document.getElementById('map')) {

        map = new google.maps.Map(document.getElementById('map'), {

            zoom:13,
            center: new google.maps.LatLng(52.9627, -1.1398),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false,
            streetViewControl:false,
            panControl: false,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.LARGE,
                position: google.maps.ControlPosition.RIGHT_CENTER
            }
           
        });
        
        loadFilters(false);

        google.maps.event.addListener(map, 'bounds_changed', function () {
            if (map.getZoom() > 16 && map.getBounds().contains(new google.maps.LatLng(53.1515, -1.0868)) && robinHood == null) {
                var infowindow = new google.maps.InfoWindow({
                    content: 'Robin Hood is a mythological figure, perhaps representing a pagan Green Man.'
                });

                robinHood = new google.maps.Marker({
                    position: new google.maps.LatLng(53.1515, -1.0868),
                    map: map,
                    icon: new google.maps.MarkerImage('/images/robin.png')
                });

                google.maps.event.addListener(robinHood, 'click', function () {
                    infowindow.open(map, robinHood);
                });
            }
        });
    }


}
function ClearFilters() {
    for (var i = 0; i < this.markers.length; i++) {
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
}

function loadFilters(clear) {
    if (clear) 
        ClearFilters();
    
    $.getJSON('/Ajax/GetVenues.ashx', GetFilters(), function (mapData) {
        data = mapData;
        hasData = true;
        checkData(mapData);
    });
    
   
    refreshMap();
}

function clearClusters(e) {
    e.preventDefault();
    e.stopPropagation();
    markerClusterer.clearMarkers();
}


