/**
* MapIt
*
* @copyright Copyright 2013, Dimitris Krestos
* @license Apache License, Version 2.0 (http://www.opensource.org/licenses/apache2.0.php)
* @link http://vdw.staytuned.gr
* @version v0.2.2
*/
/* Available options
*
* Map type: ROADMAP, SATELLITE, HYBRID, TERRAIN
* Map styles: false, GRAYSCALE
*
*/
/* Sample html structure
*/
document.write('');
;(function($, window, undefined) {
"use strict";
$.fn.mapit = function(options) {
var defaults = {
latitude: 37.774929,
longitude: -122.419416,
zoom: 16,
type: 'ROADMAP',
scrollwheel: false,
marker: {
latitude: -33.807215,
longitude: 151.090511,
icon: 'assets/img/marker.png',
open: false,
center: true
},
};
var options = $.extend(defaults, options);
$(this).each(function() {
var $this = $(this);
// Init Map
var directionsDisplay = new google.maps.DirectionsRenderer();
var mapOptions = {
scrollwheel: options.scrollwheel,
scaleControl: false,
center: options.marker.center ? new google.maps.LatLng(options.marker.latitude, options.marker.longitude) : new google.maps.LatLng(options.latitude, options.longitude),
zoom: options.zoom,
mapTypeId: eval('google.maps.MapTypeId.' + options.type)
};
var map = new google.maps.Map(document.getElementById($this.attr('id')), mapOptions);
directionsDisplay.setMap(map);
// Styles
if (options.styles) {
var GRAYSCALE_style = [{featureType:"all",elementType:"all",stylers:[{saturation: -100}]}];
var MIDNIGHT_style = [{featureType:'water',stylers:[{color:'#021019'}]},{featureType:'landscape',stylers:[{color:'#08304b'}]},{featureType:'poi',elementType:'geometry',stylers:[{color:'#0c4152'},{lightness:5}]},{featureType:'road.highway',elementType:'geometry.fill',stylers:[{color:'#000000'}]},{featureType:'road.highway',elementType:'geometry.stroke',stylers:[{color:'#0b434f'},{lightness:25}]},{featureType:'road.arterial',elementType:'geometry.fill',stylers:[{color:'#000000'}]},{featureType:'road.arterial',elementType:'geometry.stroke',stylers:[{color:'#0b3d51'},{lightness:16}]},{featureType:'road.local',elementType:'geometry',stylers:[{color:'#000000'}]},{elementType:'labels.text.fill',stylers:[{color:'#ffffff'}]},{elementType:'labels.text.stroke',stylers:[{color:'#000000'},{lightness:13}]},{featureType:'transit',stylers:[{color:'#146474'}]},{featureType:'administrative',elementType:'geometry.fill',stylers:[{color:'#000000'}]},{featureType:'administrative',elementType:'geometry.stroke',stylers:[{color:'#144b53'},{lightness:14},{weight:1.4}]}]
var BLUE_style = [{featureType:'water',stylers:[{color:'#46bcec'},{visibility:'on'}]},{featureType:'landscape',stylers:[{color:'#f2f2f2'}]},{featureType:'road',stylers:[{saturation:-100},{lightness:45}]},{featureType:'road.highway',stylers:[{visibility:'simplified'}]},{featureType:'road.arterial',elementType:'labels.icon',stylers:[{visibility:'off'}]},{featureType:'administrative',elementType:'labels.text.fill',stylers:[{color:'#444444'}]},{featureType:'transit',stylers:[{visibility:'off'}]},{featureType:'poi',stylers:[{visibility:'off'}]}]
var mapType = new google.maps.StyledMapType(eval(options.styles + '_style'), { name: options.styles });
map.mapTypes.set(options.styles, mapType);
map.setMapTypeId(options.styles);
}
// Home Marker
var home = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(options.marker.latitude, options.marker.longitude),
icon: new google.maps.MarkerImage(options.marker.icon),
title: options.marker.title
});
// Add info on the home marker
var info = new google.maps.InfoWindow({
content: options.address
});
// Open the info window immediately
if (options.marker.open) {
info.open(map, home);
} else {
google.maps.event.addListener(home, 'click', function() {
info.open(map, home);
});
};
// Create Markers (locations)
var infowindow = new google.maps.InfoWindow();
var marker, i;
var markers = [];
// Directions
var directionsService = new google.maps.DirectionsService();
$this.on ('route', function(event, origin) {
var request = {
origin: new google.maps.LatLng(options.origins[origin][0], options.origins[origin][1]),
destination: new google.maps.LatLng(options.marker.latitude, options.marker.longitude),
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(result);
};
});
});
// Show Markers Per Category (helper)
$this.on ('show', function(event, category) {
$this.trigger('hide_all');
$this.trigger('reset');
// Set bounds
var bounds = new google.maps.LatLngBounds();
for (var i=0; i