{"version":3,"file":"map.js","sources":["map.js"],"sourcesContent":["function OriginalOverlay(options) {\n    $.extend(this, new google.maps.OverlayView);\n\n    window.mapOverlay = {};\n\n    var self = this;\n    var pinnable = options.pinnable;\n    this.el = options.el;\n\n    this.overlayContent = document.createElement('div');\n\n    $(this.overlayContent).append('<h3>' + pinnable.title + '</h3>');\n    $(this.overlayContent).append('<p>' + pinnable.intro + '</p>');\n    if (window.location.pathname != pinnable.url) {\n        $(this.overlayContent).append('<p class=\"more\"><strong>Read More</strong></p>');\n    }\n\n    var width = $('body').innerWidth();\n    if( pinnable.img && width > 450) {\n        $(this.overlayContent).append('<img src=\"' + pinnable.img + '\" />');\n        $(this.overlayContent).addClass('image');\n    }\n    $(this.overlayContent).addClass('overlay-content');\n\n    var close = $('<div>').addClass('overlay-content__close').html(svg('close')).appendTo($(this.overlayContent));\n\n    close.on('click', function(e) {\n        e.stopPropagation();\n        self.close();\n    });\n\n    if (window.location.pathname != pinnable.url) {\n        $(this.overlayContent).on('click', function() {\n            if( pinnable.url ) {\n                window.location = pinnable.url;\n            }\n        });\n    }\n\n    this.setValues(options);\n\n    this.isOpen = false;\n\n}\n\nOriginalOverlay.prototype.onAdd = function() {\n    var location = window.mapOverlay.location;\n    var map = window.mapOverlay.map;\n\n    this.getPanes().overlayMouseTarget.appendChild( this.overlayContent );\n\n    var loc = new google.maps.LatLng(location.position.lat(), location.position.lng());\n    var _px = this.fromLatLngToPoint(loc, map);\n\n\n    // Recalculate based on the width of the overlay\n    _px.x += $(this.overlayContent).innerWidth() / 2;\n\n    // Recalculate based on the left position of the overlay\n    _px.x += 40;\n\n    // Recalculate based on the height of the overlay\n    if ($(this.overlayContent).innerHeight() < $(this.el).height()) {\n        _px.y += $(this.overlayContent).innerHeight() / 2;\n    } else {\n        _px.y += $(this.el).innerHeight() / 2;\n    }\n\n    // Recalculate based on the top position of the overlay\n    _px.y -= 51;\n\n    var _lat = this.fromPointTolatLng(_px, map);\n\n    var loc = new google.maps.LatLng(_lat.lat(), _lat.lng());\n    map.setCenter(loc);\n}\n\nOriginalOverlay.prototype.draw = function() {\n    var projection = this.getProjection();\n\n    if( !projection )\n    return; // Not Ready for drawing\n\n    var latLng = this.get('position');\n    if( !latLng ) {\n        this.close();\n        return;\n    }\n\n    var point = projection.fromLatLngToDivPixel( latLng );\n    this.overlayContent.style.top =  (point.y - 51) + 'px';\n    this.overlayContent.style.left = (point.x + 40) + 'px';\n};\n\nOriginalOverlay.prototype.open = function( map, location ) {\n    var self = this;\n\n    if( map ) {\n        this.setMap(map);\n        window.mapOverlay.map = map;\n    }\n\n    if( location ) {\n        this.set('anchor', location);\n        this.bindTo('position', location);\n        window.mapOverlay.location = location;\n    }\n\n    this.draw();\n\n    var latLng = this.get('position');\n\n    $(self.overlayContent).addClass('overlay-content-making-visible');\n    setTimeout(function() {\n        // YIELD to the browser\n        $(self.overlayContent).addClass('overlay-content-visible');\n    }, 20);\n\n    this.isOpen = true;\n};\n\n\nOriginalOverlay.prototype.fromLatLngToPoint = function(latLng, map) {\n    var topRight = map.getProjection().fromLatLngToPoint(map.getBounds().getNorthEast());\n    var bottomLeft = map.getProjection().fromLatLngToPoint(map.getBounds().getSouthWest());\n    var scale = Math.pow(2, map.getZoom());\n    var worldPoint = map.getProjection().fromLatLngToPoint(latLng);\n    return new google.maps.Point((worldPoint.x - bottomLeft.x) * scale, (worldPoint.y - topRight.y) * scale);\n}\n\nOriginalOverlay.prototype.fromPointTolatLng = function(point, map) {\n    var topRight = map.getProjection().fromLatLngToPoint(map.getBounds().getNorthEast());\n    var bottomLeft = map.getProjection().fromLatLngToPoint(map.getBounds().getSouthWest());\n    var scale = Math.pow(2, map.getZoom());\n    return map.getProjection().fromPointToLatLng(new google.maps.Point((point.x / scale) + bottomLeft.x, (point.y / scale) + topRight.y));\n}\n\nOriginalOverlay.prototype.close = function( ) {\n    var self = this;\n\n    $(this.overlayContent).removeClass('overlay-content-visible');\n    setTimeout(function() {\n        $(self.overlayContent).removeClass('overlay-content-making-visible');\n    }, 200);\n    this.isOpen = false;\n};\n\nOriginalOverlay.prototype.remove = function() {\n    this.close();\n};\n\nOriginalIcon = function(type) {\n    return {\n        url: '/images/pin-' + type + '.png',\n        size: new google.maps.Size(41, 51),\n        anchor: new google.maps.Point(19, 48)\n    };\n};\n\nfunction mapLazyload(api_key) {\n    if (typeof api_key !== 'undefined') {\n        $.getScript('https://maps.googleapis.com/maps/api/js?key=' + api_key, function() {initGmap();});\n    }\n};\n\nfunction initGmap() {\n    var $elem_wrap = $('#fullscreen-map'),\n        $elem = $elem_wrap.find('.inner-map');\n\n    var itin = false;\n    if ($elem_wrap.hasClass('map-content__map')) {\n        itin = true\n    }\n\n    var swlat = parseFloat($elem_wrap.data('swlat')),\n        swlng = parseFloat($elem_wrap.data('swlng')),\n        nelat = parseFloat($elem_wrap.data('nelat')),\n        nelng = parseFloat($elem_wrap.data('nelng')),\n        loclat = parseFloat($elem_wrap.data('lat')),\n        loclng = parseFloat($elem_wrap.data('lng')),\n        centertype = $elem_wrap.data('center'),\n        zoom = 10\n\n    if ($elem_wrap.data('zoom')) {\n        zoom = parseFloat($elem_wrap.data('zoom'));\n    }\n\n    var map = null;\n    var markers = [];\n    var activemarker = null;\n\n    var loadmap = function() {\n        if (map !== null || $elem.length == 0) { return; }\n\n        map = new google.maps.Map( $elem[0], {\n            center: new google.maps.LatLng(swlat, swlng),\n            zoom: zoom,\n            mapTypeId: google.maps.MapTypeId.ROADMAP,\n            disableDefaultUI: true\n        });\n\n        $.ajax({\n            url: $elem_wrap.data('pinsource'),\n            dataType: 'json'\n        }).done(function(data) {\n            $.each(data, function(index, pinnable) {\n\n                var marker = new google.maps.Marker({\n                    position: new google.maps.LatLng(pinnable.location[0], pinnable.location[1]),\n                    map: map,\n                    title: pinnable.title,\n                    icon: OriginalIcon(pinnable.type),\n                    type: pinnable.type\n                });\n\n                markers.push(marker);\n\n                var infowindow = new OriginalOverlay({\n                    pinnable: pinnable,\n                    el: $elem[0],\n                    activemarker: activemarker\n                });\n\n                if (pinnable.title == $elem_wrap.data('currentdest'))\n                {\n                    infowindow.open(map, marker);\n                }\n\n                google.maps.event.addListener(marker, 'click', function() {\n                    // Default overlay/popup behaviour\n                    if (!itin) {\n                        if ( infowindow.isOpen ) {\n                            infowindow.close();\n                            return;\n                        }\n\n                        if( activemarker && activemarker.isOpen ) {\n                            activemarker.close();\n                        }\n\n                        activemarker = infowindow;\n                        infowindow.open(map, marker);\n                    } else {\n                        var title = marker.title;\n                        // Find id of itinerary from listing\n                        $('.result__title:contains(' + title + ')', '.map-content__results').closest('a').trigger('click');\n                    }\n                });\n            });\n\n            google.maps.event.addListener(map, 'click', function() {\n                if( activemarker && activemarker.isOpen ) {\n                    activemarker.close();\n                }\n            });\n\n            mapFilters(markers, map);\n        });\n    };\n\n    var recenter = function() {\n        if ('location' == centertype) {\n            var loc = new google.maps.LatLng(loclat, loclng);\n            map.setCenter(loc);\n        } else {\n            var bounds = new google.maps.LatLngBounds(\n                new google.maps.LatLng(swlat, swlng),\n                new google.maps.LatLng(nelat, nelng)\n            );\n\n            map.fitBounds(bounds);\n        }\n    };\n\n    $elem_wrap.find('.close').on('click touchend', function(e) {\n        e.preventDefault();\n        $elem_wrap.hide();\n        if( '_gaq' in window ) {\n            _gaq.push(['_trackEvent', 'Map', 'Close', window.location.pathname, undefined, true]);\n        }\n    });\n\n    window.initMap = function() {\n        loadmap();\n        $elem_wrap.show();\n        google.maps.event.trigger(map, 'resize');\n        recenter();\n    };\n\n    var mapFilters = function(markers, defaultMap) {\n        var options = [];\n        $.each(markers, function(i, marker) {\n            if (options[marker.type] == undefined) {\n                options[marker.type] = [];\n            }\n            options[marker.type].push(marker);\n        });\n\n        var keys = Object.keys(options);\n\n        if (keys.length <= 1) {\n            return;\n        }\n\n        $('.map-content').attr('data-filter-count', keys.length).addClass('map-content--filterable');\n\n        for(i = 0; i < keys.length; i++){\n            var value = options[keys[i]];\n            $('.map-content-filter[data-filter=\"' + keys[i] + '\"]').addClass('map-content-filter--filterable');\n            $('.map-content-filter[data-filter=\"' + keys[i] + '\"]').find('.map-content-filter__count').html(value.length);\n        }\n\n        $('.map-content-filter').not('.map-content-filter--filterable').remove();\n\n        $('.map-content-filter').on('click', function() {\n            $(this).toggleClass('map-content-filter--active');\n            var map = $(this).hasClass('map-content-filter--active') ? defaultMap : null;\n            $.each(options[$(this).data('filter')], function(i, marker) {\n                marker.setMap(map);\n            });\n        });\n\n        $('.map-content-filter[data-filter=\"activity\"]').trigger('click');\n        $('.map-content-filter[data-filter=\"accommodation\"]').trigger('click');\n    };\n\n    /*\n     * Contact Map\n     */\n    (function() {\n        var $contactmap = $('.contact #map');\n        if( !$contactmap.length ) { return; }\n\n        var lat = $contactmap.parent().data('lat'),\n            lng = $contactmap.parent().data('lng');\n\n        var mapoptions = {\n                center: new google.maps.LatLng(lat, lng),\n                zoom: 15,\n                scrollwheel: false,\n                draggable: $(document.body).hasClass('touch-mobile') ? false : true,\n                mapTypeId: google.maps.MapTypeId.ROADMAP,\n                mapTypeControlOptions: {\n                    position: google.maps.ControlPosition.BOTTOM_LEFT\n                }\n            };\n\n        if ($('body').width() < 600)\n        {\n            mapoptions.disableDefaultUI = true;\n        }\n\n        map = new google.maps.Map( $('#map')[0], mapoptions);\n\n        var marker = new google.maps.Marker({\n            position: new google.maps.LatLng(lat, lng),\n            map: map\n        });\n\n        $(window).on('resize', function() {\n            $contactmap.width( $(window).width() );\n\n            $contactmap.css('left', 0 - $('#inner-wrapper').offset().left );\n\n            google.maps.event.trigger(map, 'resize');\n            map.setCenter( new google.maps.LatLng(lat, lng) );\n        }).trigger('resize');\n    })();\n\n    if ($('body').hasClass('map-init')) {\n        window.setTimeout(initMap, 100);\n    }\n\n}\n"],"names":["OriginalOverlay","options","$","extend","this","google","maps","OverlayView","window","mapOverlay","self","pinnable","width","el","overlayContent","document","createElement","append","title","intro","location","pathname","url","innerWidth","img","addClass","html","svg","appendTo","on","e","stopPropagation","close","setValues","isOpen","mapLazyload","api_key","getScript","initGmap","lat","lng","mapoptions","$contactmap","$elem_wrap","$elem","find","itin","swlat","hasClass","parseFloat","data","swlng","nelat","nelng","loclat","loclng","centertype","zoom","map","markers","activemarker","mapFilters","preventDefault","hide","_gaq","push","undefined","initMap","bounds","length","Map","center","LatLng","mapTypeId","MapTypeId","ROADMAP","disableDefaultUI","ajax","dataType","done","each","index","marker","Marker","position","icon","OriginalIcon","type","infowindow","open","event","addListener","closest","trigger","show","loc","setCenter","LatLngBounds","fitBounds","defaultMap","keys","i","Object","attr","value","not","remove","toggleClass","setMap","parent","scrollwheel","draggable","body","mapTypeControlOptions","ControlPosition","BOTTOM_LEFT","css","offset","left","setTimeout","prototype","onAdd","getPanes","overlayMouseTarget","appendChild","_px","fromLatLngToPoint","_lat","x","innerHeight","height","y","fromPointTolatLng","draw","latLng","projection","getProjection","get","point","fromLatLngToDivPixel","style","top","set","bindTo","topRight","getBounds","getNorthEast","bottomLeft","getSouthWest","scale","Math","pow","getZoom","worldPoint","Point","fromPointToLatLng","removeClass","size","Size","anchor"],"mappings":"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"}