Viewing File: /home/maglabs/riadlooma2/wp-content/themes/homey/js/homey-maps.js

(function($){
    "use strict";

    if ( typeof HOMEY_map_vars !== "undefined" ) {

        var homeyMap;
        var userID = HOMEY_map_vars.user_id;
        var total_results = $('#listings_found');
        var ajaxurl = HOMEY_map_vars.admin_url+ 'admin-ajax.php';
        var header_map_cities = HOMEY_map_vars.header_map_city;
        var markerPricePins = HOMEY_map_vars.markerPricePins;
        var pin_cluster = HOMEY_map_vars.pin_cluster;
        var pin_cluster_icon = HOMEY_map_vars.pin_cluster_icon;
        var pin_cluster_zoom = HOMEY_map_vars.pin_cluster_zoom;
        var is_singular_listing = HOMEY_map_vars.is_singular_listing;
        var homey_default_radius = HOMEY_map_vars.homey_default_radius;
        var geo_country_limit = HOMEY_map_vars.geo_country_limit;
        var geocomplete_country = HOMEY_map_vars.geocomplete_country;
        var markerCluster = null;
        var current_marker = 0;
        var homey_map_first_load = 0;
        var markers = new Array();
        var halfmap_ajax_container = $('#homey_halfmap_listings_container');
        var InfoWindow = new google.maps.InfoWindow();
        var google_map_style = HOMEY_map_vars.google_map_style;
        var default_lat = HOMEY_map_vars.default_lat;
        var default_lng = HOMEY_map_vars.default_lng;
        var arrive = HOMEY_map_vars.arrive;
        var depart = HOMEY_map_vars.depart;
        var guests = HOMEY_map_vars.guests;
        var pets = HOMEY_map_vars.pets;
        var search_country = HOMEY_map_vars.search_country;
        var search_city = HOMEY_map_vars.search_city;
        var search_area = HOMEY_map_vars.search_area;
        var listing_type = HOMEY_map_vars.listing_type;
        var country = HOMEY_map_vars.country;
        var state = HOMEY_map_vars.state;
        var city = HOMEY_map_vars.city;
        var area = HOMEY_map_vars.area;
        var booking_type = HOMEY_map_vars.booking_type;
        var start_hour = HOMEY_map_vars.start_time;
        var end_hour = HOMEY_map_vars.end_time;
        var min_price = HOMEY_map_vars.min_price;
        var max_price = HOMEY_map_vars.max_price;
        var keyword = HOMEY_map_vars.keyword;
        var search_lat = HOMEY_map_vars.lat;
        var search_lng = HOMEY_map_vars.lng;
        var radius = HOMEY_map_vars.radius;
        var bedrooms = HOMEY_map_vars.bedrooms;
        var rooms = HOMEY_map_vars.rooms;
        var room_size = HOMEY_map_vars.room_size;
        var area = HOMEY_map_vars.area;
        var amenity = HOMEY_map_vars.amenity;
        var facility = HOMEY_map_vars.facility;
        var not_found = HOMEY_map_vars.not_found;
        var infoboxClose = HOMEY_map_vars.infoboxClose;
        var bedrooms_icon = HOMEY_map_vars.bedrooms_icon;
        var bathroom_icon = HOMEY_map_vars.bathroom_icon;
        var guests_icon = HOMEY_map_vars.guests_icon;
        var securityhomeyMap = $('#securityhomeyMap').val();
        var paged = 0;
        var compare_url = HOMEY_ajax_vars.compare_url;
        var add_compare = HOMEY_ajax_vars.add_compare;
        var remove_compare = HOMEY_ajax_vars.remove_compare;
        var compare_limit = HOMEY_ajax_vars.compare_limit;

        var homey_is_mobile = false;
        if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
            homey_is_mobile = true;
        }

        if(google_map_style!='') {
            var google_map_style = JSON.parse ( google_map_style );
        }

        if( markerPricePins == 'yes' ) {
            var infobox_top = -30;
        } else {
            var infobox_top = -70;
        }

        // Info box
        var infobox = new InfoBox({
            maxWidth: 300,
            alignBottom: true,
            disableAutoPan: false,
            pixelOffset: new google.maps.Size(-160, infobox_top),
            zIndex: null,
            boxClass: 'homeyInfobox',
            closeBoxMargin: "13px 2px -14px 2px",
            closeBoxURL: infoboxClose,
            infoBoxClearance: new google.maps.Size(20, 20),
            pane: "floatPane",
            enableEventPropagation: false,
        });

        // Remore Map Loader
        var remove_map_loader = function() {
            google.maps.event.addListener(homeyMap, 'tilesloaded', function() {
                jQuery('#homey-map-loading').hide();
            });
        }

        var homey_infobox_trigger = function() {
            $('.infobox_trigger').each(function(i) {
                $(this).on('mouseenter', function() {
                    google.maps.event.trigger(markers[i], 'click');
                });
                $(this).on('mouseleave', function() {
                    infobox.open(null,null);

                });
            });
            return false;
        }

        /*--------------------------------------------------------------------------
         *   Compare for ajax
         * -------------------------------------------------------------------------*/
        var compare_for_ajax_map = function() {
            var listings_compare = homeyGetCookie('homey_compare_listings');
            var limit_item_compare = 4;
            add_to_compare(compare_url, add_compare, remove_compare, compare_limit, listings_compare, limit_item_compare );
            remove_from_compare(listings_compare, add_compare, remove_compare);
        }

        // Marker Cluster
        var homey_markerCluster = function(homeyMap) {

            if(pin_cluster == 'yes') {
                var zoom_level = 16;
                pin_cluster_zoom = parseInt(pin_cluster_zoom);
                if(pin_cluster_zoom) {
                    zoom_level = pin_cluster_zoom;
                }
                markerCluster = new MarkerClusterer( homeyMap, markers, {
                    maxZoom: zoom_level,
                    gridSize: 60,
                    styles: [
                        {
                            url: pin_cluster_icon,
                            width: 48,
                            height: 48,
                            textColor: "#fff"
                        }
                    ]
                });
            } else {
                return;
            }
        }

        var homey_map_zoomin = function(homeyMap) {
            google.maps.event.addDomListener(document.getElementById('listing-mapzoomin'), 'click', function () {
                var current= parseInt( homeyMap.getZoom(),10);
                console.log(current);
                current++;
                if(current > 20){
                    current = 20;
                }
                console.log('== '+current+' ++');
                homeyMap.setZoom(current);
            });
        }

        var homey_map_zoomout = function(homeyMap) {
            google.maps.event.addDomListener(document.getElementById('listing-mapzoomout'), 'click', function () {
                var current= parseInt( homeyMap.getZoom(),10);
                console.log(current);
                current--;
                if(current < 0){
                    current = 0;
                }
                console.log('== '+current+' -- ');
                homeyMap.setZoom(current);
            });
        }

        var homey_change_map_type = function(map_type){

            if(map_type==='roadmap'){
                homeyMap.setMapTypeId(google.maps.MapTypeId.ROADMAP);
            }else if(map_type==='satellite'){
                homeyMap.setMapTypeId(google.maps.MapTypeId.SATELLITE);
            }else if(map_type==='hybrid'){
                homeyMap.setMapTypeId(google.maps.MapTypeId.HYBRID);
            }else if(map_type==='terrain'){
                homeyMap.setMapTypeId(google.maps.MapTypeId.TERRAIN);
            }
            return false;
        }

        $('.homeyMapType').on('click', function(e){
            e.preventDefault();
            var maptype = $(this).data('maptype');
            homey_change_map_type(maptype);
        });

        var homey_map_next = function() {
            current_marker++;
            if ( current_marker > markers.length ){
                current_marker = 1;
            }
            while( markers[current_marker-1].visible===false ){
                current_marker++;
                if ( current_marker > markers.length ){
                    current_marker = 1;
                }
            }

            console.log(current_marker-1);
            google.maps.event.trigger( markers[current_marker-1], 'click' );

        }

        var homey_map_prev = function() {
            current_marker--;
            if (current_marker < 1){
                current_marker = markers.length;
            }
            while( markers[current_marker-1].visible===false ){
                current_marker--;
                if ( current_marker > markers.length ){
                    current_marker = 1;
                }
            }

            console.log(current_marker-1);
            google.maps.event.trigger( markers[current_marker-1], 'click');
        }

        $('#homey-gmap-next').on('click', function(){
            homey_map_next();
        });

        $('#homey-gmap-prev').on('click', function(){
            homey_map_prev();
        });

        var homey_map_search_field = function (mapInput, homeyMap) {

            var searchBox = new google.maps.places.SearchBox(mapInput);
            homeyMap.controls[google.maps.ControlPosition.TOP_LEFT].push(mapInput);

            // Bias the SearchBox results towards current map's viewport.
            homeyMap.addListener('bounds_changed', function() {
                searchBox.setBounds(homeyMap.getBounds());
            });

            var markers_location = [];
            // Listen for the event fired when the user selects a prediction and retrieve
            // more details for that place.
            searchBox.addListener('places_changed', function() {
                var places = searchBox.getPlaces();

                if (places.length == 0) {
                    return;
                }

                // Clear out the old markers.
                markers_location.forEach(function(marker) {
                    marker.setMap(null);
                });
                markers_location = [];

                // For each place, get the icon, name and location.
                var bounds = new google.maps.LatLngBounds();
                places.forEach(function(place) {
                    var icon = {
                        url: place.icon,
                        size: new google.maps.Size(71, 71),
                        origin: new google.maps.Point(0, 0),
                        anchor: new google.maps.Point(17, 34),
                        scaledSize: new google.maps.Size(25, 25)
                    };

                    // Create a marker for each place.
                    markers_location.push(new google.maps.Marker({
                        map: homeyMap,
                        icon: icon,
                        title: place.name,
                        position: place.geometry.location
                    }));

                    if (place.geometry.viewport) {
                        // Only geocodes have viewport.
                        bounds.union(place.geometry.viewport);
                    } else {
                        bounds.extend(place.geometry.location);
                    }
                });
                homeyMap.fitBounds(bounds);
            });
        }

        var reloadMarkers= function() {
            // Loop through markers and set map to null for each
            for (var i=0; i<markers.length; i++) {

                markers[i].setMap(null);
            }
            // Reset the markers array
            markers = [];
        }

        var homeyAddMarker = function( props, map ) {


            $.each(props, function(i, prop) {


                var latlng = new google.maps.LatLng(prop.lat,prop.long);

                var prop_title = prop.data ? prop.data.post_title : prop.title;


                if( markerPricePins == 'yes' ) {
                    var pricePin = '<div data-id="'+prop.id+'" class="gm-marker gm-marker-color-'+prop.term_id+'"><div class="gm-marker-price">'+prop.price+'</div></div>';

                    var marker = new RichMarker({
                        map: map,
                        position: latlng,
                        draggable: false,
                        flat: true,
                        anchor: RichMarkerPosition.MIDDLE,
                        content: pricePin
                    });

                } else {
                    var marker_url = prop.icon;
                    var marker_size = new google.maps.Size( 44, 56 );
                    if( window.devicePixelRatio > 1.5 ) {
                        if ( prop.retinaIcon ) {
                            marker_url = prop.retinaIcon;
                            marker_size = new google.maps.Size( 44, 56 );
                        }
                    }

                    var marker_icon = {
                        url: marker_url,
                        size: marker_size,
                        scaledSize: new google.maps.Size( 44, 56 ),
                    };

                    var marker = new google.maps.Marker({
                        position: latlng,
                        map: map,
                        icon: marker_icon,
                        draggable: false,
                        title: prop_title,
                    });
                }

                var arrive = "";
                var depart = "";
                var bedrooms = "";
                var baths = "";
                var guests = "";
                var listing_type = '';

                var arr_depart_params = '?arrive='+prop.arrive+'&depart='+prop.depart;

                if(prop.bedrooms != '') {
                    bedrooms = '<li>'+bedrooms_icon+'<span class="total-beds">'+prop.bedrooms+'</span></li>';
                }

                if(prop.baths != '') {
                    baths = '<li>'+bathroom_icon+'<span class="total-baths">'+prop.baths+'</span></li>';
                }

                if(prop.guests != '') {
                    guests = '<li>'+guests_icon+'<span class="total-guests">'+prop.guests+'</span></li>';
                }
                if(prop.listing_type != '') {
                    listing_type = '<li class="item-type">'+prop.listing_type+'</li>';
                }

                var infoboxContent = '<div id="google-maps-info-window">'+
                    '<div class="item-wrap item-grid-view">'+
                    '<div class="media property-item">'+
                    '<div class="media-left">'+
                    '<div class="item-media item-media-thumb">'+
                    '<a href="'+prop.url+arr_depart_params+'" class="hover-effect">'+prop.thumbnail+'</a>'+
                    '<div class="item-media-price">'+
                    '<span class="item-price">'+prop.price+'</span>'+
                    '</div>'+
                    '</div>'+
                    '</div>'+
                    '<div class="media-body item-body clearfix">'+
                    '<div class="item-title-head">'+
                    '<div class="title-head-left">'+
                    '<h2 class="title">'+
                    '<a href="'+prop.url+arr_depart_params+'">'+prop_title+'</a></h2>'+
                    '<address class="item-address">'+prop.address+'</address>'+
                    '</div>'+
                    '</div>'+
                    '<ul class="item-amenities">'+
                    bedrooms+
                    baths+
                    guests+
                    listing_type+
                    '</ul>'+
                    '</div>'+
                    '</div>'+
                    '</div>'+
                    '</div>';

                google.maps.event.addListener(marker, "click", function (e) {
                    infobox.setContent(infoboxContent);
                    infobox.open(map, this);
                });

                markers.push(marker);
            });
        }


        /*--------------------------------------------------------------------------------------
        * Header Map
        *-------------------------------------------------------------------------------------*/
        var homeyMainMap = function(_lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap, halfMapAjaxData, maptype) {

            if( document.getElementById(element) != null ) {
                if( !defaultZoom ){
                    defaultZoom = 14;
                }

                if( !optimizedMapLoading ) {
                    var optimizedMapLoading = 0;
                }

                var map_cities = '';

                var ajax_Action;

                if(isHalfMap) {
                    ajax_Action = 'homey_half_map';

                } else {
                    ajax_Action = 'homey_header_map';

                    if(maptype == 'lat_long') {

                    } else if(maptype == 'city') {
                        map_cities = header_map_cities;
                    }
                }

                homeyMap = new google.maps.Map(document.getElementById(element), {
                    zoom: defaultZoom,
                    zoomControl: false,
                    mapTypeControl: false,
                    streetViewControl: false,
                    overviewMapControl: false,
                    scrollwheel: false,
                    fullscreenControl: true,
                    fullscreenControlOptions: {
                        position: google.maps.ControlPosition.RIGHT_BOTTOM
                    },
                    center: new google.maps.LatLng(_lat, _long),
                    mapTypeId: "roadmap",
                    gestureHandling: 'cooperative',
                    styles: google_map_style,
                });


                var allMarkers;

                if(isHalfMap) {
                    var ajaxData = halfMapAjaxData;
                } else {
                    var ajaxData = {
                        action: ajax_Action,
                        'map_cities': map_cities,
                        'security': securityhomeyMap,
                    };
                }




                google.maps.event.addListenerOnce(homeyMap, 'idle', function(){
                    loadMapData(ajaxurl, ajaxData);
                    makeAjaxCallOnDragend();
                });

                var makeAjaxCallOnDragend = function() {

                    if( optimizedMapLoading == 1 ) {
                        google.maps.event.addListener(homeyMap, 'dragend', function(){
                            var ajaxData = {
                                action: ajax_Action,
                                'map_cities': map_cities,
                                'security': securityhomeyMap,
                                optimized_loading: 1,
                                north_east_lat: homeyMap.getBounds().getNorthEast().lat(),
                                north_east_lng: homeyMap.getBounds().getNorthEast().lng(),
                                south_west_lat: homeyMap.getBounds().getSouthWest().lat(),
                                south_west_lng: homeyMap.getBounds().getSouthWest().lng()
                            };
                            loadMapData(ajaxurl, ajaxData);
                        });
                    }
                }


                //Load map Data
                var loadMapData = function(ajaxurl, ajaxData) {

                    $.ajax({
                        url: ajaxurl,
                        dataType: "json",
                        method: "POST",
                        data: ajaxData,
                        beforeSend: function() {
                            $('#homey-map-loading').show();

                            if(isHalfMap) {
                                halfmap_ajax_container.empty().append(''
                                    +'<div id="homey-map-loading">'
                                    +'<div class="mapPlaceholder">'
                                    +'<div class="loader-ripple spinner">'
                                    +'<div class="bounce1"></div>'
                                    +'<div class="bounce2"></div>'
                                    +'<div class="bounce3"></div>'
                                    +'</div>'
                                    +'</div>'
                                    +'</div>'
                                );
                            }
                        },
                        success: function(data) {

                            if(data.getListings === true) { 

                                reloadMarkers();
                                homeyAddMarker( data.listings, homeyMap );

                                if(isHalfMap) {
                                    halfmap_ajax_container.empty().html(data.listingHtml);
                                    total_results.empty().html(data.total_results);

                                    if( !homey_is_mobile ) {
                                        homey_infobox_trigger();
                                    }
                                }

                                if( !optimizedMapLoading ) {
                                    homey_map_bounds();
                                }
                                homey_markerCluster(homeyMap);

                                homey_init_add_favorite(ajaxurl, userID, is_singular_listing);
                                homey_init_remove_favorite(ajaxurl, userID, is_singular_listing);
                                compare_for_ajax_map();

                                if(isHalfMap) {
                                    half_map_ajax_pagi();
                                    $(".half-map-left-wrap, .half-map-right-wrap").animate({ scrollTop: 0 }, "slow");
                                }

                                $('#homey-map-loading').hide();

                            } else {
                                reloadMarkers();

                                homeyMap.setCenter(new google.maps.LatLng(default_lat, default_lng));
                                $('#homey-map-loading').hide();
                                $('#homey-halfmap').append('<div class="map-notfound">'+not_found+'</div>');
                                halfmap_ajax_container.empty().html('<div class="map-notfound">'+not_found+'</div>');
                                total_results.empty().html(data.total_results);
                            }

                            if(isHalfMap) {
                                var clearScrollVarPagi = setInterval(function (){

                                    $([document.documentElement, document.body]).animate({
                                        scrollTop: $(".half-map-right-wrap").offset().top
                                    }, 'slow');
                                    clearInterval(clearScrollVarPagi);
                                }, 500);
                            }

                        },
                        error : function (e) {
                            console.log(e);
                        }
                    });

                } // End loadMapData


                var homey_map_bounds = function() {
                    homeyMap.fitBounds( markers.reduce(function(bounds, marker ) {
                        return bounds.extend( marker.getPosition() );
                    }, new google.maps.LatLngBounds()));

                    var current = parseInt( homeyMap.getZoom(),10);
                    if(current > 20){
                        current = 14;
                    }
                    homeyMap.setZoom(current);
                }

                if( document.getElementById('listing-mapzoomin') ) {
                    homey_map_zoomin(homeyMap);
                }
                if( document.getElementById('listing-mapzoomout') ) {
                    homey_map_zoomout(homeyMap);
                }

                if( document.getElementById('google-map-search') ) {
                    var mapInput = document.getElementById('google-map-search');
                    homey_map_search_field(mapInput, homeyMap);
                }



            } else {
                console.log("No map element found");
            }

        } // End homeyMap


        var homey_make_search_call = function(current_form, current_page, _lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap) {
            var mapDiv = $('#homey-halfmap');
            arrive = current_form.find('input[name="arrive"]').val();
            depart = current_form.find('input[name="depart"]').val();
            guests = current_form.find('input[name="guest"]').val();
            keyword = current_form.find('input[name="keyword"]').val();
            pets = current_form.find('input[name="pets"]:checked').val();
            search_area = current_form.find('input[name="search_area"]').val();
            search_city = current_form.find('input[name="search_city"]').val();
            search_country = current_form.find('input[name="search_country"]').val();
            search_lat = current_form.find('input[name="lat"]').val();
            search_lng = current_form.find('input[name="lng"]').val();
            radius = current_form.find('input[name="radius"]').val();
            booking_type = current_form.find('input[name="booking_type"]').val();
            listing_type = current_form.find('select[name="listing_type"]').val();
            country = current_form.find('select[name="country"]').val();
            state = current_form.find('select[name="state"]').val();
            city = current_form.find('select[name="city"]').val();
            area = current_form.find('select[name="area"]').val();
            start_hour = current_form.find('select[name="start"]').val();
            end_hour = current_form.find('select[name="end"]').val();

            if(listing_type=="" || listing_type==undefined) {
                listing_type = mapDiv.data('type');
            }

            if(booking_type=="" || booking_type==undefined) {
                booking_type = mapDiv.data('booking_type');
            }


            amenity = current_form.find('.amenities-list input[type=checkbox]:checked').map(function(_, el) {
                return $(el).val();
            }).toArray();

            facility = current_form.find('.facilities-list input[type=checkbox]:checked').map(function(_, el) {
                return $(el).val();
            }).toArray();

            min_price = current_form.find('select[name="min-price"]').val();
            max_price = current_form.find('select[name="max-price"]').val();
            bedrooms = current_form.find('select[name="bedrooms"]').val();
            rooms = current_form.find('select[name="rooms"]').val();
            room_size = current_form.find('select[name="room_size"]').val();

            var sort_by = $('#sort_listings_halfmap').val();

            if( current_page != undefined ) {
                paged = current_page;
            }

            var maptype = '';

            ajaxData = {
                action: 'homey_half_map',
                'arrive': arrive,
                'depart': depart,
                'guest': guests,
                'keyword': keyword,
                'pets': pets,
                'bedrooms': bedrooms,
                'rooms': rooms,
                'room_size': room_size,
                'search_country': search_country,
                'search_city': search_city,
                'search_area': search_area,
                'listing_type': listing_type,
                'min-price': min_price,
                'max-price': max_price,
                'country': country,
                'search_lat': search_lat,
                'search_lng': search_lng,
                'radius': radius,
                'state': state,
                'city': city,
                'area': area,
                'booking_type': booking_type,
                'start_hour': start_hour,
                'end_hour': end_hour,
                'amenity': amenity,
                'facility': facility,
                'sort_by': sort_by,
                'layout': layout,
                'num_posts': num_posts,
                'paged': current_page,
                'security': securityhomeyMap,
            };
            homeyMainMap(_lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap, ajaxData, maptype);
        }

        /*--------------------------------------------------------------------------------------
        * Simple Map
        *-------------------------------------------------------------------------------------*/
        var homeySimpleMap = function (_lat, _long, element, markerDragable, showCircle, defaultZoom, marker_pin, marker_pin_retina) {
            if (!markerDragable){
                markerDragable = false;
            }

            if(!showCircle) {
                showCircle = false;
            }

            if(!defaultZoom) {
                defaultZoom = 15;
            }

            var mapCenter;

            var homeySimpleMarker = function(homeyMap) {

                var marker_url = marker_pin;
                var marker_size = new google.maps.Size( 44, 56 );
                if( window.devicePixelRatio > 1.5 ) {
                    if ( marker_pin_retina ) {
                        marker_url = marker_pin_retina;
                        marker_size = new google.maps.Size( 44, 56 );
                    }
                }

                var marker_icon = {
                    url: marker_url,
                    size: marker_size,
                    scaledSize: new google.maps.Size( 44, 56 ),
                };

                var marker = new google.maps.Marker({
                    position: homeyMap.getCenter(),
                    map: homeyMap,
                    icon: marker_icon,
                    draggable: false,
                    animation: google.maps.Animation.DROP,
                });
            }

            var homeyCircle = function(homeyMap) {
                var Circle = new google.maps.Circle({
                    strokeColor: '#4f5962',
                    strokeOpacity: 0.8,
                    strokeWeight: 2,
                    fillColor: '#4f5962',
                    fillOpacity: 0.35,
                    map: homeyMap,
                    center: mapCenter,
                    radius: 0.5 * 1000
                });
            }

            mapCenter = new google.maps.LatLng(_lat, _long);
            var drawMap = function(mapCenter){
                var mapOptions = {
                    zoom: defaultZoom,
                    center: mapCenter,
                    disableDefaultUI: false,
                    //scrollwheel: true,
                    gestureHandling: 'cooperative',
                    styles: google_map_style,
                };
                var mapElement = document.getElementById(element);
                homeyMap = new google.maps.Map(mapElement, mapOptions);

                if(!showCircle) {
                    homeySimpleMarker(homeyMap);
                }

                if(showCircle) {
                    homeyCircle(homeyMap);
                }

            }
            drawMap(mapCenter);


        } // homeySimpleMap

        /*--------------------------------------------------------------------------------------
        * Sticky Map
        *-------------------------------------------------------------------------------------*/
        var homeyStickyMap = function(element, showMarkerLabels, defaultZoom, mapPaged) {

            if( document.getElementById(element) != null ) {
                if( !defaultZoom ){
                    defaultZoom = 14;
                }

                var _lat = '';
                var _long = '';
                var ajax_Action = 'homey_sticky_map';

                homeyMap = new google.maps.Map(document.getElementById(element), {
                    zoom: defaultZoom,
                    zoomControl: false,
                    mapTypeControl: false,
                    streetViewControl: false,
                    overviewMapControl: false,
                    scrollwheel: false,
                    fullscreenControl: true,
                    fullscreenControlOptions: {
                        position: google.maps.ControlPosition.RIGHT_BOTTOM
                    },
                    center: new google.maps.LatLng(_lat, _long),
                    mapTypeId: "roadmap",
                    gestureHandling: 'cooperative',
                    styles: google_map_style,
                });

                var allMarkers;

                var ajaxData = {
                    action: ajax_Action,
                    'paged': mapPaged,
                    'security': securityhomeyMap
                };
                google.maps.event.addListenerOnce(homeyMap, 'idle', function(){
                    loadMapData(ajaxurl, ajaxData);
                });



                //Load map Data
                var loadMapData = function(ajaxurl, ajaxData) {

                    $.ajax({
                        url: ajaxurl,
                        dataType: "json",
                        method: "POST",
                        data: ajaxData,
                        success: function(data) {


                            if(data.getListings === true) {

                                reloadMarkers();
                                homeyAddMarker( data.listings, homeyMap );

                                homey_map_bounds();
                                homey_markerCluster(homeyMap);

                                $('#homey-map-loading').hide();

                            } else {

                            }

                        },
                        error : function (e) {
                            console.log(e);
                        }
                    });

                } // End loadMapData


                var homey_map_bounds = function() {
                    homeyMap.fitBounds( markers.reduce(function(bounds, marker ) {
                        return bounds.extend( marker.getPosition() );
                    }, new google.maps.LatLngBounds()));
                }

                if( document.getElementById('listing-mapzoomin') ) {
                    homey_map_zoomin(homeyMap);
                }
                if( document.getElementById('listing-mapzoomout') ) {
                    homey_map_zoomout(homeyMap);
                }

                if( document.getElementById('google-map-search') ) {
                    var mapInput = document.getElementById('google-map-search');
                    homey_map_search_field(mapInput, homeyMap);
                }



            } else {
                console.log("No map element found");
            }

        } // End homeyStickyMap


        if($('#banner-map').length > 0) {
            var mapDiv = $('#banner-map');
            var zoomlevel = mapDiv.data('zoomlevel');
            var maptype = mapDiv.data('maptype');
            var maplat = mapDiv.data('lat');
            var maplong = mapDiv.data('long');
            var ajaxData = null;

            var _lat = '';//maplat;
            var _long = '';//maplong;
            var element = "banner-map";
            var markerTarget = "infobox";
            var showMarkerLabels = true;
            var isHalfMap = false;
            var defaultZoom = zoomlevel;
            var optimizedMapLoading = 0; // 0/1 If enable map will load data when map moved within it's bounds otherwise will load data at once
            homeyMainMap(_lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap, ajaxData, maptype)
        }

        if($('#homey-halfmap').length > 0) {
            var mapDiv = $('#homey-halfmap');
            var zoomlevel = mapDiv.data('zoom');

            var layout = mapDiv.data('layout');
            var num_posts = mapDiv.data('num-posts');
            var order = mapDiv.data('order');
            var type = mapDiv.data('type');
            var booking_type = mapDiv.data('booking_type');
            var maptype = '';

            if(listing_type=="") {
                listing_type = type;
            }

            var _lat = default_lat;
            var _long = default_lng;

            var element = "homey-halfmap";
            var markerTarget = "infobox";
            var showMarkerLabels = true;
            var isHalfMap = true;
            var defaultZoom = zoomlevel;
            var optimizedMapLoading = 0; // 0/1 If enable map will load data when map moved within it's bounds otherwise will load data at once

            var ajaxData = {
                action: 'homey_half_map',
                'arrive': arrive,
                'depart': depart,
                'guest': guests,
                'keyword': keyword,
                'pets': pets,
                'bedrooms': bedrooms,
                'rooms': rooms,
                'room_size': room_size,
                'search_country': search_country,
                'search_city': search_city,
                'search_area': search_area,
                'listing_type': listing_type,
                'min-price': min_price,
                'max-price': max_price,
                'country': country,
                'state': state,
                'city': city,
                'area': area,
                'booking_type': booking_type,
                'search_lat': search_lat,
                'search_lng': search_lng,
                'radius': radius,
                'start_hour': start_hour,
                'end_hour': end_hour,
                'amenity': amenity,
                'facility': facility,
                'layout': layout,
                'num_posts': num_posts,
                'sort_by': order,
                'paged': paged,
                'security': securityhomeyMap,
            };


            homeyMainMap(_lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap, ajaxData, maptype);

            $('.homey_half_map_search_btn').on('click', function(e) {
                e.preventDefault();
                var current_form = $(this).parents('.half-map-wrap');
                var current_page = 1;
                homey_make_search_call(current_form, current_page, _lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap);

            });

            $('#sort_listings_halfmap').on('change', function(e) {
                e.preventDefault();
                var current_form = $(this).parents('.half-map-wrap');
                var current_page = 1;
                homey_make_search_call(current_form, current_page, _lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap);

            });

            var half_map_ajax_pagi = function() {
                $('.half_map_ajax_pagi a').on('click', function(e){
                    e.preventDefault();
                    var current_page = $(this).data('homeypagi');
                    var current_form = $(this).parents('.half-map-wrap');
                    $(".half-map-left-wrap, .half-map-right-wrap").animate({ scrollTop: 0 }, "slow");
                    homey_make_search_call(current_form, current_page, _lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap);

                });
                return false;
            } // enf half_map_ajax_pagi

            var radius_search_slider = function(default_radius) {
                $("#radius-range-slider").slider(
                    {
                        value: default_radius,
                        min: 0,
                        max: 100,
                        step: 5,
                        slide: function (event, ui) {
                            $("#radius-range-text").html(ui.value);
                            $("#radius-range-value").val(ui.value);
                        },
                        stop: function( event, ui ) {

                            var current_form = $(this).parents('.half-map-wrap');
                            var current_page = 1;
                            homey_make_search_call(current_form, current_page, _lat, _long, element, markerTarget, showMarkerLabels, defaultZoom, optimizedMapLoading, isHalfMap);
                        }
                    }
                );

                $("#radius-range-text").html($('#radius-range-slider').slider('value'));
                $("#radius-range-value").val($('#radius-range-slider').slider('value'));
            }

            if($( "#radius-range-slider").length > 0 ) {

                radius_search_slider(homey_default_radius);

            }

        }

        // Single listing map
        if($('#homey-single-map').length > 0 ) {
            var mapDiv = $('#homey-single-map');
            var zoomlevel = mapDiv.data('zoom');
            var pin_type = mapDiv.data('pin-type');
            var marker_pin = mapDiv.data('marker-pin');
            var marker_pin_retina = mapDiv.data('marker-pin-retina');
            var _lat   = mapDiv.data('lat');
            var _long  = mapDiv.data('long');
            var element     = 'homey-single-map';
            var defaultZoom = zoomlevel;
            var markerDragable = false;
            if(pin_type == 'marker') {
                var showCircle = false;
            } else {
                var showCircle = true;
            }
            homeySimpleMap(_lat, _long, element, markerDragable, showCircle, defaultZoom, marker_pin, marker_pin_retina);
        }

        // Single listing map
        if($('#homey_sticky_map').length > 0 ) {
            var mapDiv = $('#homey_sticky_map');
            var element     = 'homey_sticky_map';
            var defaultZoom = 12;
            var showMarkerLabels = true;
            var mapPaged = mapDiv.data('mappaged');
            homeyStickyMap(element, showMarkerLabels, defaultZoom, mapPaged);
        }

        $('#homey-gmap-full').on('click', function(){
            $('div.gm-style button[title="Toggle fullscreen view"]').trigger('click');
        });



        /*------------------------------------ Submit Property -----------------------------------------------*/
        /*--------------------------------------------------------------------------
        * Add/Edit listing for autocomplete
        *---------------------------------------------------------------------------*/
        var componentForm_listing = {
            locality: 'long_name',
            administrative_area_level_1: 'long_name',
            administrative_area_level_2: 'short_name',
            country: 'long_name',
            postal_code: 'short_name',
            neighborhood: 'long_name',
            sublocality_level_1: 'long_name',
            political: 'long_name'
        };

        if (document.getElementById('listing_address') || document.getElementById('experience_address')) {
            var inputField, defaultBounds, autocomplete;

            var inputField = "";
            if(typeof $('input[name="listing_address"]').val() != 'undefined'){
                inputField = $('input[name="listing_address"]');
            }

            if(typeof $('input[name="experience_address"]').val() != 'undefined'){
                inputField = $('input[name="experience_address"]');
            }

            defaultBounds = new google.maps.LatLngBounds(
                new google.maps.LatLng(-90, -180),
                new google.maps.LatLng(90, 180)
            );
            var options = {
                bounds: defaultBounds,
                types: ['geocode'],
            };

            var mapDiv = $('#map');
            var maplat = mapDiv.data('add-lat');
            var maplong = mapDiv.data('add-long');

            var map = new google.maps.Map(document.getElementById('map'), {
                center: {lat: maplat, lng: maplong},
            });


            if (document.getElementById('homey_edit_map')) {
                var latlng = {lat: parseFloat(maplat), lng: parseFloat(maplong)};
                var marker = new google.maps.Marker({
                    position: latlng,
                    map: map,
                    draggable:true
                });
                google.maps.event.addListener(marker, 'dragend', function(evt) {
                    document.getElementById('lat').value = this.getPosition().lat();
                    document.getElementById('lng').value = this.getPosition().lng();
                });

                map.setZoom(16);
            } else {
                var latlng = {lat: parseFloat(maplat), lng: parseFloat(maplong)};
                var marker = new google.maps.Marker({
                    map: map,
                    position: latlng,
                    draggable:true,
                    anchorPoint: new google.maps.Point(0, -29)
                });
                google.maps.event.addListener(marker, 'dragend', function(evt) {
                    document.getElementById('lat').value = this.getPosition().lat();
                    document.getElementById('lng').value = this.getPosition().lng();
                });
                map.setZoom(13);
            }

            autocomplete = new google.maps.places.Autocomplete(inputField, options);

            if(geo_country_limit != 0 && geocomplete_country != '') {
                autocomplete.setComponentRestrictions(
                    {'country': [geocomplete_country]});
            }

            autocomplete.bindTo('bounds', map);

            var geocoder = new google.maps.Geocoder();

            document.getElementById('find').addEventListener('click', function() {
                marker.setVisible(false);
                homey_geocodeAddress(geocoder, map, marker);
            });


            google.maps.event.addListener(autocomplete, 'place_changed', function () {
                var place = autocomplete.getPlace();
                fillInAddress_for_form(place);

                marker.setVisible(false);
                //var place = autocomplete.getPlace();
                if (!place.geometry) {
                    // User entered the name of a Place that was not suggested and
                    // pressed the Enter key, or the Place Details request failed.
                    window.alert("No details available for input: '" + place.name + "'");
                    return;
                }

                // If the place has a geometry, then present it on a map.
                if (place.geometry.viewport) {
                    map.fitBounds(place.geometry.viewport);
                } else {
                    map.setCenter(place.geometry.location);
                    map.setZoom(17);  // Why 17? Because it looks good.
                }
                marker.setPosition(place.geometry.location);
                marker.setVisible(true);

                console.log(place);

            });
        }

        function homey_geocodeAddress(geocoder, resultsMap, marker) {
            var lat = document.getElementById('lat').value;
            var lng = document.getElementById('lng').value;
            var latlng = {lat: parseFloat(lat), lng: parseFloat(lng)};

            geocoder.geocode({'location': latlng}, function(results, status) {
                if (status === 'OK') {
                    var i, has_city, addressType, val;

                    has_city = 0;

                    $('#city').val('');
                    $('#countyState').val('');
                    $('#zip').val('');
                    $('#area').val('');
                    $('#homey_country').val('');

                    document.getElementById('lat').value = results[0].geometry.location.lat();
                    document.getElementById('lng').value = results[0].geometry.location.lng();
                    document.getElementById('listing_address').value = results[0].formatted_address;

                    // Get each component of the address from the result details
                    // and fill the corresponding field on the form.
                    for (i = 0; i < results[0].address_components.length; i++) {
                        addressType = results[0].address_components[i].types[0];
                        val = results[0].address_components[i][componentForm_listing[addressType]];

                        if (addressType === 'neighborhood'  || addressType === 'sublocality_level_1' || addressType === 'administrative_area_level_2' ) {

                                $('#area').val(val);

                        } else if (addressType === 'political' || addressType === 'locality' || addressType === 'sublocality_level_1') {

                            $('#city').val(val);
                            if(val !== '') {
                                has_city = 1;
                            }
                        } else if(addressType === 'country') {
                            $('#homey_country').val(val);

                        } else if(addressType === 'postal_code') {
                            $('#zip').val(val);

                        } else if(addressType === 'administrative_area_level_1') {
                            $('#countyState').val(val);
                        }
                    }

                    if(has_city === 0) {
                        get_new_city_2('city', results[0].adr_address);
                    }

                    // If the place has a geometry, then present it on a map.
                    if (results[0].geometry.viewport) {
                        resultsMap.fitBounds(results[0].geometry.viewport);
                    } else {
                        resultsMap.setCenter(results[0].geometry.location);
                        resultsMap.setZoom(17);  // Why 17? Because it looks good.
                    }
                    marker.setPosition(results[0].geometry.location);
                    marker.setVisible(true);
                    console.log(results);

                } else {
                    alert(geo_coding_msg +': '+ status);
                }
            });
        }


        function fillInAddress_for_form(place) {
            var i, has_city, addressType, val;

            has_city = 0;

            $('#city').val('');
            $('#countyState').val('');
            $('#zip').val('');
            $('#area').val('');
            $('#homey_country').val('');

            document.getElementById('lat').value = place.geometry.location.lat();
            document.getElementById('lng').value = place.geometry.location.lng();

            // Get each component of the address from the place details
            // and fill the corresponding field on the form.
            for (i = 0; i < place.address_components.length; i++) {
                addressType = place.address_components[i].types[0];
                val = place.address_components[i][componentForm_listing[addressType]];


                if (addressType === 'neighborhood'  || addressType === 'sublocality_level_1' || addressType === 'administrative_area_level_2' ) {
                    $('#area').val(val);

                } else if (addressType === 'locality') {

                    $('#city').val(val);
                    if(val !== '') {
                        has_city = 1;
                    }
                } else if(addressType === 'country') {
                    $('#homey_country').val(val);

                } else if(addressType === 'postal_code') {
                    $('#zip').val(val);

                } else if(addressType === 'administrative_area_level_1') {
                    $('#countyState').val(val);
                }
            }

            $('#address-place').html(place.adr_address);

            if(has_city === 0) {
                get_new_city_2('city', place.adr_address);
            }
        }

        function get_new_city_2(stringplace, adr_address) {
            var new_city;
            new_city = $(adr_address).filter('span.locality').html() ;
            $('#'+stringplace).val(new_city);
        }


        /*--------------------------------------------------------------------------
       * Searches Auto Complete
       *---------------------------------------------------------------------------*/
        if (document.getElementById('location_search')) {
            var inputField, defaultBounds, autocomplete_main_search;
            inputField = (document.getElementById('location_search'));
            defaultBounds = new google.maps.LatLngBounds(
                new google.maps.LatLng(-90, -180),
                new google.maps.LatLng(90, 180)
            );
            var options = {
                bounds: defaultBounds,
                types: ['geocode']
            };

            autocomplete_main_search = new google.maps.places.Autocomplete(inputField, options);

            if(geo_country_limit != 0 && geocomplete_country != '') {
                autocomplete_main_search.setComponentRestrictions(
                    {'country': [geocomplete_country]});
            }

            google.maps.event.addListener(autocomplete_main_search, 'place_changed', function () {
                var place = autocomplete_main_search.getPlace();
                fillInAddress_main_search(place);
                console.log(place);

            });
        }

        if (document.getElementById('location_search_mobile')) {
            var inputField_m, defaultBounds_m, autocomplete_mobile_search;
            inputField_m = (document.getElementById('location_search_mobile'));
            defaultBounds_m = new google.maps.LatLngBounds(
                new google.maps.LatLng(-90, -180),
                new google.maps.LatLng(90, 180)
            );
            var options_m = {
                bounds: defaultBounds_m,
                types: ['geocode'],
            };

            autocomplete_mobile_search = new google.maps.places.Autocomplete(inputField_m, options_m);

            if(geo_country_limit != 0 && geocomplete_country != '') {
                autocomplete_mobile_search.setComponentRestrictions(
                    {'country': [geocomplete_country]});
            }

            google.maps.event.addListener(autocomplete_mobile_search, 'place_changed', function () {
                var place_m = autocomplete_mobile_search.getPlace();
                fillInAddress_main_search(place_m);
                console.log(place_m);

            });
        }

        if (document.getElementById('location_search_banner')) {
            var inputField_2, defaultBounds_2, autocomplete_banner_search;
            inputField_2 = (document.getElementById('location_search_banner'));
            defaultBounds_2 = new google.maps.LatLngBounds(
                new google.maps.LatLng(-90, -180),
                new google.maps.LatLng(90, 180)
            );
            var options_2 = {
                bounds: defaultBounds_2,
                types: ['geocode'],
            };

            autocomplete_banner_search = new google.maps.places.Autocomplete(inputField_2, options_2);

            if(geo_country_limit != 0 && geocomplete_country != '') {
                autocomplete_banner_search.setComponentRestrictions(
                    {'country': [geocomplete_country]});
            }

            google.maps.event.addListener(autocomplete_banner_search, 'place_changed', function () {
                var place_banner = autocomplete_banner_search.getPlace();
                fillInAddress_main_search(place_banner);
                console.log(place_banner);

            });
        }

        function fillInAddress_main_search(place) {
            var i, has_city, addressType, val;
            has_city = 0;

            $('input[name="search_city"]').val('');
            $('input[name="search_area"]').val('');
            $('input[name="search_country"]').val('');

            $('input[name="lat"]').val(place.geometry.location.lat());
            $('input[name="lng"]').val(place.geometry.location.lng());

            //var latLng = new google.maps.LatLng( place.geometry.location.lat(), place.geometry.location.lng() );
            

            // Get each component of the address from the place details
            // and fill the corresponding field on the form.
            for (i = 0; i < place.address_components.length; i++) {
                addressType = place.address_components[i].types[0];
                val = place.address_components[i][componentForm_listing[addressType]];

                if (typeof (val) !== 'undefined') {
                    val = val.toLowerCase();
                    val = val.split(' ').join('-');
                }

                if (addressType === 'neighborhood'  || addressType === 'sublocality_level_1' || addressType === 'administrative_area_level_2' ) {
                    $('input[name="search_area"]').attr('data-value', val);
                    $('input[name="search_area"]').val(val);

                } else if (addressType === 'locality') {

                    $('input[name="search_city"]').attr('data-value', val);
                    $('input[name="search_city"]').val(val);
                    if(val !== '') {
                        has_city = 1;
                    }
                } else if(addressType === 'country') {
                    $('input[name="search_country"]').attr('data-value', val);
                    $('input[name="search_country"]').val(val);
                }
            }

            if(has_city === 0) {
                get_new_city('search_city', place.adr_address);
            }
        }


        function get_new_city(stringplace, adr_address) {
            var new_city;
            new_city = $(adr_address).filter('span.locality').html() ;
            $('input[name="'+stringplace+'"]').val(new_city);
        }



    }// typeof HOMEY_map_vars

})(jQuery); // end function
Back to Directory File Manager