artbox.maps.js 7.96 KB
var company_map = [];
var main_map = [];
$(
    function()
    {
        initMap(company_map);
        initMainMap(main_map);
        $(document).on(
            'click', '.map_company_filter', function(e)
            {
                e.preventDefault();
                var id = $(this).data('id');
                var user = $('#map_company').data('user');
                $.ajax(
                    {
                        url : '/portfolio/portfolio',
                        data : {
                            user_id : user,
                            specialization_id : id,
                            start: company_map['start']
                        },
                        success : function(data)
                        {
                            if(data['result'].length > 0)
                            {
                                showMarkers(company_map, data['result']);
                                company_map['map'].fitBounds(company_map['bounds']);
                            } else
                            {
                                clearMap(company_map);
                            }
                        },
                        dataType : 'json'
                    }
                );
            }
        );
        $(document).on('click', '.company_map_time_link', function(e) {
            e.preventDefault();
            $('.company_map_time_link').removeClass('active');
            $(this).addClass('active');
            company_map['start'] = $(this).data('start');
        });
        $(document).on('click', '.main_map_link', function(e) {
            e.preventDefault();
            var action = $(this).data('action');
            $.ajax(
                {
                    url : '/'+action+'/'+action+'-all',
                    data : {},
                    success : function(data)
                    {
                        if(data['result'].length > 0)
                        {
                            showMarkers(main_map, data['result']);
                            main_map['map'].fitBounds(main_map['bounds']);
                        } else
                        {
                            clearMap(main_map);
                        }
                    },
                    dataType : 'json'
                }
            );
        });
    }
);
function showMarkers(variable, elements)
{
    console.log(elements);
    var position = {
        lat : undefined,
        lng : undefined
    };
    var color;
    var title;
    setMapOnAll(variable['markers'], null);
    variable['markers'] = [];
    if(variable['clusterer'] !== undefined)
    {
        variable['clusterer'].clearMarkers();
    }
    variable['bounds'] = new google.maps.LatLngBounds();
    for(var i = 0; i < elements.length; i++)
    {
        position.lat = parseFloat(elements[i].lat);
        position.lng = parseFloat(elements[i].lng);
        title = elements[i].name;
        if(elements[i].specializations !== null && elements[i].specializations !== undefined) {
            color = elements[i].specializations[0].background;
        }
        icon = variable['icon'];
        if(color !== null && color !== undefined)
        {
            icon.fillColor = color;
        }
        marker = new google.maps.Marker(
            {
                position : position,
                title : title,
                icon : icon
            }
        );
        variable['markers'].push(marker);
        variable['bounds'].extend(marker.getPosition());
    }
    setMapOnAll(variable['markers'], variable['map']);
    replaceClusterer(variable);
}
function clearMap(variable) {
    setMapOnAll(variable['markers'], null);
    variable['markers'] = [];
    if(variable['clusterer'] !== undefined)
    {
        variable['clusterer'].clearMarkers();
    }
}
function replaceClusterer(variable)
{
    if(variable['clusterer' !== undefined])
    {
        variable['clusterer'].clearMarkers();
    }
    variable['clusterer'] = new MarkerClusterer(
        variable['map'], variable['markers'], {
            maxZoom : 10,
            gridSize : 100,
            styles : variable['clusterer_style']
        }
    );
}
function setMapOnAll(markers, map)
{
    for(var i = 0; i < markers.length; i++)
    {
        markers[i].setMap(map);
    }
}
function initMap(variable)
{
    if(document.getElementById('map_company') == null) {
        return false;
    }
    variable['settings'] = {
        zoom : 7,
        scrollwheel : true,
        maxZoom: 18,
        center : {
            "lat" : 50.4501,
            "lng" : 30.5234
        },
        mapTypeControl : false,
        mapTypeControlOptions : {style : google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl : false,
        navigationControlOptions : {style : google.maps.NavigationControlStyle.SMALL},
        scaleControl : false,
        streetViewControl : false,
        rotateControl : false,
        zoomControl : true,
        mapTypeId : google.maps.MapTypeId.ROADMAP,
    };
    variable['map'] = new google.maps.Map(document.getElementById('map_company'), variable['settings']);
    variable['markers'] = [];
    variable['clusterer'] = undefined;
    variable['icon'] = {
        path : 'M0-48c-9.8 0-17.7 7.8-17.7 17.4 0 15.5 17.7 30.6 17.7 30.6s17.7-15.4 17.7-30.6c0-9.6-7.9-17.4-17.7-17.4z',
        fillColor : 'white',
        fillOpacity : 0.8,
        scale : 0.5
    };
    variable['clusterer_style'] = [
        {
            url : '/images/markers/clasters.png',
            height : 36,
            width : 36
        }
    ];
    variable['bounds'] = new google.maps.LatLngBounds();
    variable['start'] = $('.company_map_time_link.active').data('start');
    $.ajax(
        {
            url : '/portfolio/portfolio',
            data : {
                user_id : $('#map_company').data('user')
            },
            success : function(data)
            {
                if(data['result'].length > 0)
                {
                    showMarkers(company_map, data['result']);
                    company_map['map'].fitBounds(company_map['bounds']);
                } else
                {
                    clearMap(company_map);
                }
            },
            dataType : 'json'
        }
    );
}
function initMainMap(variable)
{
    if(document.getElementById('map_main') == null) {
        return false;
    }
    variable['settings'] = {
        zoom : 7,
        scrollwheel : true,
        maxZoom: 18,
        center : {
            "lat" : 50.4501,
            "lng" : 30.5234
        },
        mapTypeControl : false,
        mapTypeControlOptions : {style : google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl : false,
        navigationControlOptions : {style : google.maps.NavigationControlStyle.SMALL},
        scaleControl : false,
        streetViewControl : false,
        rotateControl : false,
        zoomControl : true,
        mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    variable['map'] = new google.maps.Map(document.getElementById('map_main'), variable['settings']);
    variable['markers'] = [];
    variable['clusterer'] = undefined;
    variable['icon'] = {
        path : 'M0-48c-9.8 0-17.7 7.8-17.7 17.4 0 15.5 17.7 30.6 17.7 30.6s17.7-15.4 17.7-30.6c0-9.6-7.9-17.4-17.7-17.4z',
        fillColor : 'white',
        fillOpacity : 0.8,
        scale : 0.5
    };
    variable['clusterer_style'] = [
        {
            url : '/images/markers/clasters.png',
            height : 36,
            width : 36
        }
    ];
    variable['bounds'] = new google.maps.LatLngBounds();
    $.ajax(
        {
            url : '/project/project-all',
            data : {},
            success : function(data)
            {
                if(data['result'].length > 0)
                {
                    showMarkers(main_map, data['result']);
                    main_map['map'].fitBounds(main_map['bounds']);
                } else
                {
                    clearMap(main_map);
                }
            },
            dataType : 'json'
        }
    );
}