/*
 DMXzone Google Maps
 Version: 2.0.1
 (c) 2014 DMXzone.com
 @build 18-12-2014 14:22:44
*/
(function(k){k.dmxGoogleMaps=k.fn.gMap;var q={icon:{infowindowanchor:[0,2]}};k.fn.dmxGoogleMaps=function(h){var r=this.selector,d=k.extend(!1,q,h,{}),e=k.dmxDataBindings,f=k(r);if(e&&d.repeatElement){h=d.repeatElement;var a=d.markers[0];d.markers=[];e.globalScope.watch(h,function(c){function b(a,c){if(a&&"object"==typeof a)for(var g in a)a[g]=b(a[g],c);return"string"==typeof a?e.$parseTemplate(a,c):a}if(e&&f.gMap&&c&&c.length){f.gMap("removeAllMarkers");var g=[];k.each(c,function(c,m){var d=k.extend(!0,
{},a),h=new e.Scope;h.set(m);d=b(d,h);g.push(d);f.gMap("addMarker",d)});"fit"==d.zoom&&(c=f.data("gmap"),f.gMap("setZoom","fit",d,c.markers))}})}e&&d.markers&&d.markers.length&&k.each(d.markers,function(a,b){b.key||(b.key="dmxMarker"+a);d.log&&console.log("process: "+b.key);k.each(b,function(a,c){d.log&&console.log("check: "+b[a]);if(b[a]&&-1!=b[a].indexOf("{{"))switch(d.log&&console.log("found dynamic "+a),a){case "address":b[a]=e.$parseTemplate(b[a],e.globalScope,function(a){if(e&&f.gMap&&a){d.log&&
console.log(b.key+": change address to "+a);var c=f.gMap("getMarker",b.key);(new google.maps.Geocoder).geocode({address:a},function(a,b){if(b===google.maps.GeocoderStatus.OK&&(c.setPosition(a[0].geometry.location),"fit"==d.zoom)){var g=f.data("gmap");f.gMap("setZoom","fit",d,g.markers)}})}});break;case "latitude":b[a]=e.$parseTemplate(b[a],e.globalScope,function(a){if(e&&f.gMap&&a){d.log&&console.log(b.key+": change latitude to "+a);var c=f.gMap("getMarker",b.key),g=c.getPosition();c.setPosition(new google.maps.LatLng(a,
g.lng()));"fit"==d.zoom&&(a=f.data("gmap"),f.gMap("setZoom","fit",d,a.markers))}});break;case "longitude":b[a]=e.$parseTemplate(b[a],e.globalScope,function(a){if(e&&f.gMap&&a){d.log&&console.log(b.key+": change longitude to "+a);var c=f.gMap("getMarker",b.key),g=c.getPosition();c.setPosition(new google.maps.LatLng(g.lat(),a));"fit"==d.zoom&&(a=f.data("gmap"),f.gMap("setZoom","fit",d,a.markers))}});break;case "html":b[a]=e.$parseTemplate(b[a],e.globalScope,function(a){if(e&&f.gMap&&a){d.log&&console.log(b.key+
": change html to "+a);var c=f.gMap("getMarker",b.key);c.infoWindow&&c.infoWindow.setContent('<div class="gmap_marker">'+a+"</div>")}});break;case "title":b[a]=e.$parseTemplate(b[a],e.globalScope,function(a){e&&f.gMap&&a&&(d.log&&console.log(b.key+": change title to "+a),f.gMap("getMarker",b.key).setTitle(a.toString()))});break;case "key":b[a]=e.$parseTemplate(b[a],e.globalScope,function(a){e&&f.gMap&&a&&(d.log&&console.log(b.key+": change key to "+a),f.gMap("getMarker",b.key).key=a)})}})});k.each("address latitude longitude zoom width height".split(" "),
function(a,b){if(d[b]&&-1!=d[b].toString().indexOf("{{"))switch(b){case "address":d[b]=e.$parseTemplate(d[b],e.globalScope,function(a){e&&f.gMap&&a&&(d.log&&console.log(markerInfo.key+": change address to "+a),(new google.maps.Geocoder).geocode({address:a},function(a,b){b===google.maps.GeocoderStatus.OK&&f.data("gmap").gmap.setCenter(a[0].geometry.location)}))});break;case "latitude":d[b]=e.$parseTemplate(d[b],e.globalScope,function(a){if(e&&f.gMap&&a){d.log&&console.log("center : change latitude to "+
a);var b=f.data("gmap").gmap,c=b.getCenter();b.setCenter(new google.maps.LatLng(a,c.lng()))}});break;case "longitude":d[b]=e.$parseTemplate(d[b],e.globalScope,function(a){if(e&&f.gMap&&a){d.log&&console.log("center : change longitude to "+a);var b=f.data("gmap").gmap,c=b.getCenter();b.setCenter(new google.maps.LatLng(c.lat(),a))}});break;case "zoom":d[b]=e.$parseTemplate(d[b],e.globalScope,function(a){e&&f.gMap&&a&&(d.log&&console.log("center : change zoom to "+a),f.data("gmap").gmap.setZoom(a))});
break;case "width":d[b]=e.$parseTemplate(d[b],e.globalScope,function(a){e&&f.gMap&&a&&(d.log&&console.log("center : change width to "+a),f.data("gmap"),f.css("position","relative"),f.width(a),f.gMap("fixAfterResize"))});break;case "height":d[b]=e.$parseTemplate(d[b],e.globalScope,function(a){e&&f.gMap&&a&&(d.log&&console.log("center : change height to "+a),f.data("gmap"),f.css("position","relative"),f.height(a),f.gMap("fixAfterResize"))})}});if(d.drawing){var b=d.onComplete;d.onComplete=function(){if(d.extensions&&
0<d.extensions.length)for(var a=0;a<d.extensions.length;a++)if(null!=window["dmxGoogleMaps_"+d.extensions[a]+"Load"])window["dmxGoogleMaps_"+d.extensions[a]+"Load"](d[d.extensions[a]],k(r).data("gmap"));b&&b()}}k(this.selector).gMap(d)}})(jQuery);
(function(k){var q=function(){this.markers=[];this.mainMarker=!1;this.icon="http://www.google.com/mapfiles/marker.png"};q.prototype.dist=function(a){return Math.sqrt(Math.pow(this.markers[0].latitude-a.latitude,2)+Math.pow(this.markers[0].longitude-a.longitude,2))};q.prototype.setIcon=function(a){this.icon=a};q.prototype.addMarker=function(a){this.markers[this.markers.length]=a};q.prototype.getMarker=function(){if(this.mainmarker)return this.mainmarker;var a,b;1<this.markers.length?(a=new h.MarkerImage("http://chart.googleapis.com/chart?chst=d_map_pin_letter&chld="+
this.markers.length+"%7cff776b%7c000000"),b="cluster of "+this.markers.length+" markers"):(a=new h.MarkerImage(this.icon),b=this.markers[0].title);return this.mainmarker=new h.Marker({position:new h.LatLng(this.markers[0].latitude,this.markers[0].longitude),icon:a,title:b,map:null})};var h=google.maps,r=new h.Geocoder,d=0,e=0,f={},f={init:function(a){var b,c=k.extend({},k.fn.gMap.defaults,a);c.markers&&0<c.markers.length&&null==c.markers[c.markers.length-1]&&c.markers.pop();for(b in k.fn.gMap.defaults.icon)c.icon[b]||
(c.icon[b]=k.fn.gMap.defaults.icon[b]);return this.each(function(){var a=k(this),b=f._getMapCenter.apply(a,[c]);"fit"==c.zoom&&(c.zoomFit=!0,c.zoom=f._autoZoom.apply(a,[c]));var d={zoom:c.zoom,center:b,mapTypeControl:c.mapTypeControl,mapTypeControlOptions:{},zoomControl:c.zoomControl,zoomControlOptions:{},panControl:c.panControl,panControlOptions:{},scaleControl:c.scaleControl,scaleControlOptions:{},streetViewControl:c.streetViewControl,streetViewControlOptions:{},mapTypeId:c.maptype,scrollwheel:c.scrollwheel,
maxZoom:c.maxZoom,minZoom:c.minZoom};c.controlsPositions.mapType&&(d.mapTypeControlOptions.position=c.controlsPositions.mapType);c.controlsPositions.zoom&&(d.zoomControlOptions.position=c.controlsPositions.zoom);c.controlsPositions.pan&&(d.panControlOptions.position=c.controlsPositions.pan);c.controlsPositions.scale&&(d.scaleControlOptions.position=c.controlsPositions.scale);c.controlsPositions.streetView&&(d.streetViewControlOptions.position=c.controlsPositions.streetView);c.styles&&(d.styles=c.styles);
d.mapTypeControlOptions.style=c.controlsStyle.mapType;d.zoomControlOptions.style=c.controlsStyle.zoom;d=k.extend(d,c.extra);d=new h.Map(this,d);c.log&&console.log("map center is:");c.log&&console.log(b);a.data("$gmap",d);a.data("gmap",{opts:c,gmap:d,markers:[],markerKeys:{},infoWindow:null,clusters:[]});if(0!==c.controls.length)for(b=0;b<c.controls.length;b+=1)d.controls[c.controls[b].pos].push(c.controls[b].div);c.clustering.enabled?(b=a.data("gmap"),b.markers=c.markers,f._renderCluster.apply(a,
[]),h.event.addListener(d,"bounds_changed",function(){f._renderCluster.apply(a,[])})):0!==c.markers.length&&f.addMarkers.apply(a,[c.markers]);f._onComplete.apply(a,[])})},_delayedMode:!1,_onComplete:function(){var a=this.data("gmap"),b=this;if(0!==d)window.setTimeout(function(){f._onComplete.apply(b,[])},100);else{if(f._delayedMode){var c=f._getMapCenter.apply(this,[a.opts,!0]);f._setMapCenter.apply(this,[c]);a.opts.zoomFit&&(c=f._autoZoom.apply(this,[a.opts,!0]),a.gmap.setZoom(c))}a.opts.onComplete()}},
_setMapCenter:function(a){var b=this.data("gmap");b&&b.opts.log&&console.log("delayed setMapCenter called");if(b&&void 0!==b.gmap&&0==d)b.gmap.setCenter(a);else{var c=this;window.setTimeout(function(){f._setMapCenter.apply(c,[a])},100)}},_boundaries:null,_getBoundaries:function(a){var b=a.markers,c,d=1E3,g=-1E3,h=1E3,e=-1E3;if(b){for(c=0;c<b.length;c+=1)b[c].latitude&&b[c].longitude&&(d>b[c].latitude&&(d=b[c].latitude),g<b[c].longitude&&(g=b[c].longitude),h>b[c].longitude&&(h=b[c].longitude),e<b[c].latitude&&
(e=b[c].latitude),a.log&&console.log(b[c].latitude,b[c].longitude,d,g,h,e));f._boundaries={N:d,E:g,W:h,S:e}}-1E3==d&&(f._boundaries={N:0,E:0,W:0,S:0});return f._boundaries},_getMapCenter:function(a,b){var c,d=this,g,e;if(a.markers.length&&("fit"==a.latitude||"fit"==a.longitude))return b&&(a.markers=f._convertMarkers(data.markers)),g=f._getBoundaries(a),c=new h.LatLng((g.N+g.S)/2,(g.E+g.W)/2),a.log&&console.log(b,g,c),c;if(a.latitude&&a.longitude)return c=new h.LatLng(a.latitude,a.longitude);c=new h.LatLng(0,
0);if(a.address)return r.geocode({address:a.address},function(b,c){c===google.maps.GeocoderStatus.OK?f._setMapCenter.apply(d,[b[0].geometry.location]):a.log&&console.log("Geocode was not successful for the following reason: "+c)}),c;if(0<a.markers.length){e=null;for(g=0;g<a.markers.length;g+=1)if(a.markers[g].setCenter){e=a.markers[g];break}if(null===e)for(g=0;g<a.markers.length;g+=1){if(a.markers[g].latitude&&a.markers[g].longitude){e=a.markers[g];break}a.markers[g].address&&(e=a.markers[g])}if(null===
e)return c;if(e.latitude&&e.longitude)return new h.LatLng(e.latitude,e.longitude);e.address&&r.geocode({address:e.address},function(b,c){c===google.maps.GeocoderStatus.OK?f._setMapCenter.apply(d,[b[0].geometry.location]):a.log&&console.log("Geocode was not successful for the following reason: "+c)})}return c},_renderCluster:function(){var a=this.data("gmap"),b=a.markers,c=a.clusters,d=a.opts,g;for(g=0;g<c.length;g+=1)c[g].getMarker().setMap(null);c.length=0;if(g=a.gmap.getBounds()){var e=g.getNorthEast(),
h=g.getSouthWest(),k=[],l=(e.lat()-h.lat())*d.clustering.clusterSize/100;for(g=0;g<b.length;g+=1)b[g].latitude<e.lat()&&b[g].latitude>h.lat()&&b[g].longitude<e.lng()&&b[g].longitude>h.lng()&&(k[k.length]=b[g]);d.log&&console.log("number of markers "+k.length+"/"+b.length);d.log&&console.log("cluster radius: "+l);for(g=0;g<k.length;g+=1){e=-1;for(b=0;b<c.length&&!(h=c[b].dist(k[g]),h<l&&(e=b,d.clustering.fastClustering));b+=1);-1===e?(b=new q,b.addMarker(k[g]),c[c.length]=b):c[e].addMarker(k[g])}d.log&&
console.log("Total clusters in viewport: "+c.length);for(b=0;b<c.length;b+=1)c[b].getMarker().setMap(a.gmap)}else{var n=this;window.setTimeout(function(){f._renderCluster.apply(n)},1E3)}},_processMarker:function(a,b,c,d){var g=this.data("gmap"),f=g.gmap,e=g.opts,k;void 0===d&&(d=new h.LatLng(a.latitude,a.longitude));if(!b){var l={image:e.icon.image,iconSize:new h.Size(e.icon.iconsize[0],e.icon.iconsize[1]),iconAnchor:new h.Point(e.icon.iconanchor[0],e.icon.iconanchor[1]),infoWindowAnchor:new h.Size(e.icon.infowindowanchor[0],
e.icon.infowindowanchor[1])};b=new h.MarkerImage(l.image,l.iconSize,null,l.iconAnchor)}c||(new h.Size(e.icon.shadowsize[0],e.icon.shadowsize[1]),l&&l.iconAnchor||new h.Point(e.icon.iconanchor[0],e.icon.iconanchor[1]));b={position:d,icon:b,title:a.title,map:null,draggable:!0===a.draggable?!0:!1};e.clustering.enabled||(b.map=f);k=new h.Marker(b);k.setShadow(c);g.markers.push(k);a.key&&(g.markerKeys[a.key]=k);var n;a.html&&(c={content:"string"===typeof a.html?e.html_prepend+a.html+e.html_append:a.html,
pixelOffset:a.infoWindowAnchor},e.log&&console.log("setup popup with data"),e.log&&console.log(c),n=new h.InfoWindow(c),k.infoWindow=n,h.event.addListener(k,"click",function(){e.log&&console.log("opening popup "+a.html);e.singleInfoWindow&&g.infoWindow&&g.infoWindow.close();n.open(f,k);g.infoWindow=n}));a.html&&a.popup&&(e.log&&console.log("opening popup "+a.html),n.open(f,k),g.infoWindow=n);a.onDragEnd&&h.event.addListener(k,"dragend",function(b){e.log&&console.log("drag end");a.onDragEnd(b)})},
_convertMarkers:function(a){var b=[],c;for(c=0;c<a.length;c+=1)b[c]={latitude:a[c].getPosition().lat(),longitude:a[c].getPosition().lng()};return b},_geocodeMarker:function(a,b,c){var k=this;r.geocode({address:a.address},function(g,s){s===h.GeocoderStatus.OK?(--d,k.data("gmap").opts.log&&console.log("Geocode was successful with point: ",g[0].geometry.location),f._processMarker.apply(k,[a,b,c,g[0].geometry.location])):(s===h.GeocoderStatus.OVER_QUERY_LIMIT&&(k.data("gmap").opts.noAlerts||0!==e||alert("Error: too many geocoded addresses! Switching to 1 marker/s mode."),
e+=1E3,window.setTimeout(function(){f._geocodeMarker.apply(k,[a,b,c])},e)),k.data("gmap").opts.log&&console.log("Geocode was not successful for the following reason: "+s))})},_autoZoom:function(a,b){var c=k(this).data("gmap"),d=k.extend({},c?c.opts:{},a),e,h=39135.758482;d.log&&console.log("autozooming map");b&&(d.markers=f._convertMarkers(c.markers));d=f._getBoundaries(d);c=111E3*(d.E-d.W)/this.width();e=111E3*(d.S-d.N)/this.height();for(d=2;20>d&&!(c>h||e>h);d+=1)h/=2;return d-2},addMarkers:function(a){var b=
this.data("gmap").opts;if(0!==a.length)for(b.log&&console.log("adding "+a.length+" markers"),b=0;b<a.length;b+=1)f.addMarker.apply(this,[a[b]])},addMarker:function(a){var b=this.data("gmap").opts;b.log&&console.log("putting marker at "+a.latitude+", "+a.longitude+" with address "+a.address+" and html "+a.html);var c=b.icon.image,e=new h.Size(b.icon.iconsize[0],b.icon.iconsize[1]),g=new h.Point(b.icon.iconanchor[0],b.icon.iconanchor[1]),k=new h.Size(b.icon.infowindowanchor[0],b.icon.infowindowanchor[1]),
m=b.icon.shadow,p=new h.Size(b.icon.shadowsize[0],b.icon.shadowsize[1]),l=new h.Point(b.icon.shadowanchor[0],b.icon.shadowanchor[1]);a.infoWindowAnchor=k;a.icon&&(a.icon.image&&(c=a.icon.image),a.icon.iconsize&&(e=new h.Size(a.icon.iconsize[0],a.icon.iconsize[1])),a.icon.iconanchor&&(g=new h.Point(a.icon.iconanchor[0],a.icon.iconanchor[1])),a.icon.infowindowanchor&&new h.Size(a.icon.infowindowanchor[0],a.icon.infowindowanchor[1]),a.icon.shadow&&(m=a.icon.shadow),a.icon.shadowsize&&(p=new h.Size(a.icon.shadowsize[0],
a.icon.shadowsize[1])),a.icon.shadowanchor&&(l=new h.Point(a.icon.shadowanchor[0],a.icon.shadowanchor[1])));c=new h.MarkerImage(c,e,null,g);m=new h.MarkerImage(m,p,null,l);a.address?("_address"===a.html&&(a.html=a.address),"_address"==a.title&&(a.title=a.address),b.log&&console.log("geocoding marker: "+a.address),d+=1,f._delayedMode=!0,f._geocodeMarker.apply(this,[a,c,m])):("_latlng"===a.html&&(a.html=a.latitude+", "+a.longitude),"_latlng"==a.title&&(a.title=a.latitude+", "+a.longitude),b=new h.LatLng(a.latitude,
a.longitude),f._processMarker.apply(this,[a,c,m,b]))},removeAllMarkers:function(){var a=this.data("gmap").markers,b=this.data("gmap").markerKeys,c;for(c=0;c<a.length;c+=1)a[c].setMap(null),delete a[c];a.length=0;for(c in b)delete b[c]},removeMarker:function(a){var b=this.data("gmap").markers,c=this.data("gmap").markerKeys,d=b.indexOf(a);-1!==d&&(b[d].setMap(null),delete b[d],b.splice(d,1));for(d in c)c[d]===a&&delete c[d]},getMarker:function(a){return this.data("gmap").markerKeys[a]},fixAfterResize:function(a){var b=
this.data("gmap");h.event.trigger(b.gmap,"resize");a&&b.gmap.panTo(new google.maps.LatLng(0,0));b.gmap.panTo(this.gMap("_getMapCenter",b.opts))},setZoom:function(a,b,c){var d=this.data("gmap").gmap;"fit"===a&&(a=f._autoZoom.apply(this,[b,c]));d.setZoom(parseInt(a))},changeSettings:function(a){var b=this.data("gmap");void 0===a.markers?a.markers=f._convertMarkers(b.markers):0!==a.markers.length&&void 0===a.markers[0].latitude&&(a.markers=f._convertMarkers(a.markers));a.zoom&&f.setZoom.apply(this,[a.zoom,
a]);(a.latitude||a.longitude)&&b.gmap.panTo(f._getMapCenter.apply(this,[a]))},mapclick:function(a){google.maps.event.addListener(this.data("gmap").gmap,"click",function(b){a(b.latLng)})},geocode:function(a,b,c){r.geocode({address:a},function(a,d){d===h.GeocoderStatus.OK?b(a[0].geometry.location):c&&c(a,d)})},getRoute:function(a){var b=this.data("gmap"),c=b.gmap,d=new h.DirectionsRenderer,e=new h.DirectionsService,f={BYCAR:h.DirectionsTravelMode.DRIVING,BYBICYCLE:h.DirectionsTravelMode.BICYCLING,BYFOOT:h.DirectionsTravelMode.WALKING},
m={MILES:h.DirectionsUnitSystem.IMPERIAL,KM:h.DirectionsUnitSystem.METRIC},p=null,l=null,n=null;void 0!==a.routeDisplay?p=a.routeDisplay instanceof jQuery?a.routeDisplay[0]:"string"==typeof a.routeDisplay?k(a.routeDisplay)[0]:null:null!==b.opts.routeFinder.routeDisplay&&(p=b.opts.routeFinder.routeDisplay instanceof jQuery?b.opts.routeFinder.routeDisplay[0]:"string"==typeof b.opts.routeFinder.routeDisplay?k(b.opts.routeFinder.routeDisplay)[0]:null);d.setMap(c);null!==p&&d.setPanel(p);l=void 0!==f[b.opts.routeFinder.travelMode]?
f[b.opts.routeFinder.travelMode]:f.BYCAR;n=void 0!==m[b.opts.routeFinder.travelUnit]?m[b.opts.routeFinder.travelUnit]:m.KM;e.route({origin:a.from,destination:a.to,travelMode:l,unitSystem:n},function(a,c){c==h.DirectionsStatus.OK?d.setDirections(a):null!==p&&k(p).html(b.opts.routeFinder.routeErrors[c])});return this}};k.fn.gMap=function(a){if(f[a])return f[a].apply(this,Array.prototype.slice.call(arguments,1));if("object"!==typeof a&&a)k.error("Method "+a+" does not exist on jQuery.gmap");else return f.init.apply(this,
arguments)};k.fn.gMap.defaults={log:!1,address:"",latitude:null,longitude:null,zoom:3,maxZoom:null,minZoom:null,markers:[],controls:{},scrollwheel:!0,maptype:google.maps.MapTypeId.ROADMAP,mapTypeControl:!0,zoomControl:!0,panControl:!1,scaleControl:!1,streetViewControl:!0,controlsPositions:{mapType:null,zoom:null,pan:null,scale:null,streetView:null},controlsStyle:{mapType:google.maps.MapTypeControlStyle.DEFAULT,zoom:google.maps.ZoomControlStyle.DEFAULT},singleInfoWindow:!0,html_prepend:'<div class="gmap_marker">',
html_append:"</div>",icon:{image:"http://www.google.com/mapfiles/marker.png",iconsize:[20,34],iconanchor:[9,34],infowindowanchor:[9,2],shadow:"http://www.google.com/mapfiles/shadow50.png",shadowsize:[37,34],shadowanchor:[9,34]},onComplete:function(){},routeFinder:{travelMode:"BYCAR",travelUnit:"KM",routeDisplay:null,routeErrors:{INVALID_REQUEST:"The provided request is invalid.",NOT_FOUND:"One or more of the given addresses could not be found.",OVER_QUERY_LIMIT:"A temporary error occured. Please try again in a few minutes.",
REQUEST_DENIED:"An error occured. Please contact us.",UNKNOWN_ERROR:"An unknown error occured. Please try again.",ZERO_RESULTS:"No route could be found within the given addresses."}},clustering:{enabled:!1,fastClustering:!1,clusterCount:10,clusterSize:40},extra:{}}})(jQuery);
