| /*! angular-google-maps 2.3.3 2016-05-13 | 
|  *  AngularJS directives for Google Maps | 
|  *  git: https://github.com/angular-ui/angular-google-maps.git | 
|  */ | 
| ; | 
| (function( window, angular, undefined ){ | 
|   'use strict'; | 
| /* | 
| ! | 
| The MIT License | 
|   | 
| Copyright (c) 2010-2013 Google, Inc. http://angularjs.org | 
|   | 
| Permission is hereby granted, free of charge, to any person obtaining a copy | 
| of this software and associated documentation files (the 'Software'), to deal | 
| in the Software without restriction, including without limitation the rights | 
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
| copies of the Software, and to permit persons to whom the Software is | 
| furnished to do so, subject to the following conditions: | 
|   | 
| The above copyright notice and this permission notice shall be included in | 
| all copies or substantial portions of the Software. | 
|   | 
| THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
| THE SOFTWARE. | 
|   | 
| angular-google-maps | 
| https://github.com/angular-ui/angular-google-maps | 
|   | 
| @authors | 
| Nicolas Laplante - https://plus.google.com/108189012221374960701 | 
| Nicholas McCready - https://twitter.com/nmccready | 
|  */ | 
|   | 
| (function() { | 
|   angular.module('uiGmapgoogle-maps.providers', ['nemLogging']); | 
|   | 
|   angular.module('uiGmapgoogle-maps.wrapped', []); | 
|   | 
|   angular.module('uiGmapgoogle-maps.extensions', ['uiGmapgoogle-maps.wrapped', 'uiGmapgoogle-maps.providers']); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api.utils', ['uiGmapgoogle-maps.extensions']); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api.managers', []); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api.options', ['uiGmapgoogle-maps.directives.api.utils']); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api.options.builders', []); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api.models.child', ['uiGmapgoogle-maps.directives.api.utils', 'uiGmapgoogle-maps.directives.api.options', 'uiGmapgoogle-maps.directives.api.options.builders']); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api.models.parent', ['uiGmapgoogle-maps.directives.api.managers', 'uiGmapgoogle-maps.directives.api.models.child', 'uiGmapgoogle-maps.providers']); | 
|   | 
|   angular.module('uiGmapgoogle-maps.directives.api', ['uiGmapgoogle-maps.directives.api.models.parent']); | 
|   | 
|   angular.module('uiGmapgoogle-maps', ['uiGmapgoogle-maps.directives.api', 'uiGmapgoogle-maps.providers']); | 
|   | 
| }).call(this); | 
| ;angular.module('uiGmapgoogle-maps.wrapped') | 
| .service('uiGmapuuid', function() { | 
|   //BEGIN REPLACE | 
|   /* istanbul ignore next */ | 
|   /* | 
|  Version: core-1.0 | 
|  The MIT License: Copyright (c) 2012 LiosK. | 
| */ | 
| function UUID(){}UUID.generate=function(){var a=UUID._gri,b=UUID._ha;return b(a(32),8)+"-"+b(a(16),4)+"-"+b(16384|a(12),4)+"-"+b(32768|a(14),4)+"-"+b(a(48),12)};UUID._gri=function(a){return 0>a?NaN:30>=a?0|Math.random()*(1<<a):53>=a?(0|1073741824*Math.random())+1073741824*(0|Math.random()*(1<<a-30)):NaN};UUID._ha=function(a,b){for(var c=a.toString(16),d=b-c.length,e="0";0<d;d>>>=1,e+=e)d&1&&(c=e+c);return c}; | 
|   | 
|   //END REPLACE | 
| return UUID; | 
| }); | 
| ;(function() { | 
|   angular.module('uiGmapgoogle-maps.providers').factory('uiGmapMapScriptLoader', [ | 
|     '$q', 'uiGmapuuid', function($q, uuid) { | 
|       var getScriptUrl, includeScript, isGoogleMapsLoaded, scriptId, usedConfiguration; | 
|       scriptId = void 0; | 
|       usedConfiguration = void 0; | 
|       getScriptUrl = function(options) { | 
|         if (options.china) { | 
|           return 'http://maps.google.cn/maps/api/js?'; | 
|         } else { | 
|           if (options.transport === 'auto') { | 
|             return '//maps.googleapis.com/maps/api/js?'; | 
|           } else { | 
|             return options.transport + '://maps.googleapis.com/maps/api/js?'; | 
|           } | 
|         } | 
|       }; | 
|       includeScript = function(options) { | 
|         var omitOptions, query, script, scriptElem; | 
|         omitOptions = ['transport', 'isGoogleMapsForWork', 'china', 'preventLoad']; | 
|         if (options.isGoogleMapsForWork) { | 
|           omitOptions.push('key'); | 
|         } | 
|         query = _.map(_.omit(options, omitOptions), function(v, k) { | 
|           return k + '=' + v; | 
|         }); | 
|         if (scriptId) { | 
|           scriptElem = document.getElementById(scriptId); | 
|           scriptElem.parentNode.removeChild(scriptElem); | 
|         } | 
|         query = query.join('&'); | 
|         script = document.createElement('script'); | 
|         script.id = scriptId = "ui_gmap_map_load_" + (uuid.generate()); | 
|         script.type = 'text/javascript'; | 
|         script.src = getScriptUrl(options) + query; | 
|         return document.body.appendChild(script); | 
|       }; | 
|       isGoogleMapsLoaded = function() { | 
|         return angular.isDefined(window.google) && angular.isDefined(window.google.maps); | 
|       }; | 
|       return { | 
|         load: function(options) { | 
|           var deferred, randomizedFunctionName; | 
|           deferred = $q.defer(); | 
|           if (isGoogleMapsLoaded()) { | 
|             deferred.resolve(window.google.maps); | 
|             return deferred.promise; | 
|           } | 
|           randomizedFunctionName = options.callback = 'onGoogleMapsReady' + Math.round(Math.random() * 1000); | 
|           window[randomizedFunctionName] = function() { | 
|             window[randomizedFunctionName] = null; | 
|             deferred.resolve(window.google.maps); | 
|           }; | 
|           if (window.navigator.connection && window.Connection && window.navigator.connection.type === window.Connection.NONE && !options.preventLoad) { | 
|             document.addEventListener('online', function() { | 
|               if (!isGoogleMapsLoaded()) { | 
|                 return includeScript(options); | 
|               } | 
|             }); | 
|           } else if (!options.preventLoad) { | 
|             includeScript(options); | 
|           } | 
|           usedConfiguration = options; | 
|           usedConfiguration.randomizedFunctionName = randomizedFunctionName; | 
|           return deferred.promise; | 
|         }, | 
|         manualLoad: function() { | 
|           var config; | 
|           config = usedConfiguration; | 
|           if (!isGoogleMapsLoaded()) { | 
|             return includeScript(config); | 
|           } else { | 
|             if (window[config.randomizedFunctionName]) { | 
|               return window[config.randomizedFunctionName](); | 
|             } | 
|           } | 
|         } | 
|       }; | 
|     } | 
|   ]).provider('uiGmapGoogleMapApi', function() { | 
|     this.options = { | 
|       transport: 'https', | 
|       isGoogleMapsForWork: false, | 
|       china: false, | 
|       v: '3', | 
|       libraries: '', | 
|       language: 'en', | 
|       preventLoad: false | 
|     }; | 
|     this.configure = function(options) { | 
|       angular.extend(this.options, options); | 
|     }; | 
|     this.$get = [ | 
|       'uiGmapMapScriptLoader', (function(_this) { | 
|         return function(loader) { | 
|           return loader.load(_this.options); | 
|         }; | 
|       })(this) | 
|     ]; | 
|     return this; | 
|   }).service('uiGmapGoogleMapApiManualLoader', [ | 
|     'uiGmapMapScriptLoader', function(loader) { | 
|       return { | 
|         load: function() { | 
|           loader.manualLoad(); | 
|         } | 
|       }; | 
|     } | 
|   ]); | 
|   | 
| }).call(this); | 
| ;(function() { | 
|   angular.module('uiGmapgoogle-maps.directives.api.utils').service('uiGmapLogger', [ | 
|     'nemSimpleLogger', function(nemSimpleLogger) { | 
|       return nemSimpleLogger.spawn(); | 
|     } | 
|   ]); | 
|   | 
| }).call(this); | 
| ; | 
| /*global _:true, angular:true, google:true */ | 
|   | 
| (function() { | 
|   angular.module('uiGmapgoogle-maps.directives.api.utils').service('uiGmapGmapUtil', [ | 
|     'uiGmapLogger', '$compile', function(Logger, $compile) { | 
|       var _isFalse, _isTruthy, getCoords, getLatitude, getLongitude, validateCoords; | 
|       _isTruthy = function(value, bool, optionsArray) { | 
|         return value === bool || optionsArray.indexOf(value) !== -1; | 
|       }; | 
|       _isFalse = function(value) { | 
|         return _isTruthy(value, false, ['false', 'FALSE', 0, 'n', 'N', 'no', 'NO']); | 
|       }; | 
|       getLatitude = function(value) { | 
|         if (Array.isArray(value) && value.length === 2) { | 
|           return value[1]; | 
|         } else if (angular.isDefined(value.type) && value.type === 'Point') { | 
|           return value.coordinates[1]; | 
|         } else { | 
|           return value.latitude; | 
|         } | 
|       }; | 
|       getLongitude = function(value) { | 
|         if (Array.isArray(value) && value.length === 2) { | 
|           return value[0]; | 
|         } else if (angular.isDefined(value.type) && value.type === 'Point') { | 
|           return value.coordinates[0]; | 
|         } else { | 
|           return value.longitude; | 
|         } | 
|       }; | 
|       getCoords = function(value) { | 
|         if (!value) { | 
|           return; | 
|         } | 
|         if (value instanceof google.maps.LatLng) { | 
|           return value; | 
|         } else if (Array.isArray(value) && value.length === 2) { | 
|           return new google.maps.LatLng(value[1], value[0]); | 
|         } else if (angular.isDefined(value.type) && value.type === 'Point') { | 
|           return new google.maps.LatLng(value.coordinates[1], value.coordinates[0]); | 
|         } else { | 
|           return new google.maps.LatLng(value.latitude, value.longitude); | 
|         } | 
|       }; | 
|       validateCoords = function(coords) { | 
|         if (angular.isUndefined(coords)) { | 
|           return false; | 
|         } | 
|         if (_.isArray(coords)) { | 
|           if (coords.length === 2) { | 
|             return true; | 
|           } | 
|         } else if ((coords != null) && (coords != null ? coords.type : void 0)) { | 
|           if (coords.type === 'Point' && _.isArray(coords.coordinates) && coords.coordinates.length === 2) { | 
|             return true; | 
|           } | 
|         } | 
|         if (coords && angular.isDefined((coords != null ? coords.latitude : void 0) && angular.isDefined(coords != null ? coords.longitude : void 0))) { | 
|           return true; | 
|         } | 
|         return false; | 
|       }; | 
|       return { | 
|         setCoordsFromEvent: function(prevValue, newLatLon) { | 
|           if (!prevValue) { | 
|             return; | 
|           } | 
|           if (Array.isArray(prevValue) && prevValue.length === 2) { | 
|             prevValue[1] = newLatLon.lat(); | 
|             prevValue[0] = newLatLon.lng(); | 
|           } else if (angular.isDefined(prevValue.type) && prevValue.type === 'Point') { | 
|             prevValue.coordinates[1] = newLatLon.lat(); | 
|             prevValue.coordinates[0] = newLatLon.lng(); | 
|           } else { | 
|             prevValue.latitude = newLatLon.lat(); | 
|             prevValue.longitude = newLatLon.lng(); | 
|           } | 
|           return prevValue; | 
|         }, | 
|         getLabelPositionPoint: function(anchor) { | 
|           var xPos, yPos; | 
|           if (anchor === void 0) { | 
|             return void 0; | 
|           } | 
|           anchor = /^([-\d\.]+)\s([-\d\.]+)$/.exec(anchor); | 
|           xPos = parseFloat(anchor[1]); | 
|           yPos = parseFloat(anchor[2]); | 
|           if ((xPos != null) && (yPos != null)) { | 
|             return new google.maps.Point(xPos, yPos); | 
|           } | 
|         }, | 
|         createWindowOptions: function(gMarker, scope, content, defaults) { | 
|           var options; | 
|           if ((content != null) && (defaults != null) && ($compile != null)) { | 
|             options = angular.extend({}, defaults, { | 
|               content: this.buildContent(scope, defaults, content), | 
|               position: defaults.position != null ? defaults.position : angular.isObject(gMarker) ? gMarker.getPosition() : getCoords(scope.coords) | 
|             }); | 
|             if ((gMarker != null) && ((options != null ? options.pixelOffset : void 0) == null)) { | 
|               if (options.boxClass == null) { | 
|   | 
|               } else { | 
|                 options.pixelOffset = { | 
|                   height: 0, | 
|                   width: -2 | 
|                 }; | 
|               } | 
|             } | 
|             return options; | 
|           } else { | 
|             if (!defaults) { | 
|               Logger.error('infoWindow defaults not defined'); | 
|               if (!content) { | 
|                 return Logger.error('infoWindow content not defined'); | 
|               } | 
|             } else { | 
|               return defaults; | 
|             } | 
|           } | 
|         }, | 
|         buildContent: function(scope, defaults, content) { | 
|           var parsed, ret; | 
|           if (defaults.content != null) { | 
|             ret = defaults.content; | 
|           } else { | 
|             if ($compile != null) { | 
|               content = content.replace(/^\s+|\s+$/g, ''); | 
|               parsed = content === '' ? '' : $compile(content)(scope); | 
|               if (parsed.length > 0) { | 
|                 ret = parsed[0]; | 
|               } | 
|             } else { | 
|               ret = content; | 
|             } | 
|           } | 
|           return ret; | 
|         }, | 
|         defaultDelay: 50, | 
|         isTrue: function(value) { | 
|           return _isTruthy(value, true, ['true', 'TRUE', 1, 'y', 'Y', 'yes', 'YES']); | 
|         }, | 
|         isFalse: _isFalse, | 
|         isFalsy: function(value) { | 
|           return _isTruthy(value, false, [void 0, null]) || _isFalse(value); | 
|         }, | 
|         getCoords: getCoords, | 
|         validateCoords: validateCoords, | 
|         equalCoords: function(coord1, coord2) { | 
|           return getLatitude(coord1) === getLatitude(coord2) && getLongitude(coord1) === getLongitude(coord2); | 
|         }, | 
|         validatePath: function(path) { | 
|           var array, i, polygon, trackMaxVertices; | 
|           i = 0; | 
|           if (angular.isUndefined(path.type)) { | 
|             if (!Array.isArray(path) || path.length < 2) { | 
|               return false; | 
|             } | 
|             while (i < path.length) { | 
|               if (!((angular.isDefined(path[i].latitude) && angular.isDefined(path[i].longitude)) || (typeof path[i].lat === 'function' && typeof path[i].lng === 'function'))) { | 
|                 return false; | 
|               } | 
|               i++; | 
|             } | 
|             return true; | 
|           } else { | 
|             if (angular.isUndefined(path.coordinates)) { | 
|               return false; | 
|             } | 
|             if (path.type === 'Polygon') { | 
|               if (path.coordinates[0].length < 4) { | 
|                 return false; | 
|               } | 
|               array = path.coordinates[0]; | 
|             } else if (path.type === 'MultiPolygon') { | 
|               trackMaxVertices = { | 
|                 max: 0, | 
|                 index: 0 | 
|               }; | 
|               _.forEach(path.coordinates, function(polygon, index) { | 
|                 if (polygon[0].length > this.max) { | 
|                   this.max = polygon[0].length; | 
|                   return this.index = index; | 
|                 } | 
|               }, trackMaxVertices); | 
|               polygon = path.coordinates[trackMaxVertices.index]; | 
|               array = polygon[0]; | 
|               if (array.length < 4) { | 
|                 return false; | 
|               } | 
|             } else if (path.type === 'LineString') { | 
|               if (path.coordinates.length < 2) { | 
|                 return false; | 
|               } | 
|               array = path.coordinates; | 
|             } else { | 
|               return false; | 
|             } | 
|             while (i < array.length) { | 
|               if (array[i].length !== 2) { | 
|                 return false; | 
|               } | 
|               i++; | 
|             } | 
|             return true; | 
|           } | 
|         }, | 
|         convertPathPoints: function(path) { | 
|           var array, i, latlng, result, trackMaxVertices; | 
|           i = 0; | 
|           result = new google.maps.MVCArray(); | 
|           if (angular.isUndefined(path.type)) { | 
|             while (i < path.length) { | 
|               latlng; | 
|               if (angular.isDefined(path[i].latitude) && angular.isDefined(path[i].longitude)) { | 
|                 latlng = new google.maps.LatLng(path[i].latitude, path[i].longitude); | 
|               } else if (typeof path[i].lat === 'function' && typeof path[i].lng === 'function') { | 
|                 latlng = path[i]; | 
|               } | 
|               result.push(latlng); | 
|               i++; | 
|             } | 
|           } else { | 
|             array; | 
|             if (path.type === 'Polygon') { | 
|               array = path.coordinates[0]; | 
|             } else if (path.type === 'MultiPolygon') { | 
|               trackMaxVertices = { | 
|                 max: 0, | 
|                 index: 0 | 
|               }; | 
|               _.forEach(path.coordinates, function(polygon, index) { | 
|                 if (polygon[0].length > this.max) { | 
|                   this.max = polygon[0].length; | 
|                   return this.index = index; | 
|                 } | 
|               }, trackMaxVertices); | 
|               array = path.coordinates[trackMaxVertices.index][0]; | 
|             } else if (path.type === 'LineString') { | 
|               array = path.coordinates; | 
|             } | 
|             while (i < array.length) { | 
|               result.push(new google.maps.LatLng(array[i][1], array[i][0])); | 
|               i++; | 
|             } | 
|           } | 
|           return result; | 
|         }, | 
|         getPath: function(object, key) { | 
|           var obj; | 
|           if ((key == null) || !_.isString(key)) { | 
|             return key; | 
|           } | 
|           obj = object; | 
|           _.each(key.split('.'), function(value) { | 
|             if (obj) { | 
|               return obj = obj[value]; | 
|             } | 
|           }); | 
|           return obj; | 
|         }, | 
|         validateBoundPoints: function(bounds) { | 
|           if (angular.isUndefined(bounds.sw.latitude) || angular.isUndefined(bounds.sw.longitude) || angular.isUndefined(bounds.ne.latitude) || angular.isUndefined(bounds.ne.longitude)) { | 
|             return false; | 
|           } | 
|           return true; | 
|         }, | 
|         convertBoundPoints: function(bounds) { | 
|           var result; | 
|           result = new google.maps.LatLngBounds(new google.maps.LatLng(bounds.sw.latitude, bounds.sw.longitude), new google.maps.LatLng(bounds.ne.latitude, bounds.ne.longitude)); | 
|           return result; | 
|         }, | 
|         fitMapBounds: function(map, bounds) { | 
|           return map.fitBounds(bounds); | 
|         } | 
|       }; | 
|     } | 
|   ]); | 
|   | 
| }).call(this); | 
| ;(function() { | 
|   angular.module("uiGmapgoogle-maps.directives.api.utils").service("uiGmapEventsHelper", [ | 
|     "uiGmapLogger", function($log) { | 
|       var _getEventsObj, _hasEvents; | 
|       _hasEvents = function(obj) { | 
|         return angular.isDefined(obj.events) && (obj.events != null) && angular.isObject(obj.events); | 
|       }; | 
|       _getEventsObj = function(scope, model) { | 
|         if (_hasEvents(scope)) { | 
|           return scope; | 
|         } | 
|         if (_hasEvents(model)) { | 
|           return model; | 
|         } | 
|       }; | 
|       return { | 
|         setEvents: function(gObject, scope, model, ignores) { | 
|           var eventObj; | 
|           eventObj = _getEventsObj(scope, model); | 
|           if (eventObj != null) { | 
|             return _.compact(_.map(eventObj.events, function(eventHandler, eventName) { | 
|               var doIgnore; | 
|               if (ignores) { | 
|                 doIgnore = _(ignores).includes(eventName); | 
|               } | 
|               if (eventObj.events.hasOwnProperty(eventName) && angular.isFunction(eventObj.events[eventName]) && !doIgnore) { | 
|                 return google.maps.event.addListener(gObject, eventName, function() { | 
|                   if (!scope.$evalAsync) { | 
|                     scope.$evalAsync = function() {}; | 
|                   } | 
|                   return scope.$evalAsync(eventHandler.apply(scope, [gObject, eventName, model, arguments])); | 
|                 }); | 
|               } | 
|             })); | 
|           } | 
|         }, | 
|         removeEvents: function(listeners) { | 
|           var key, l; | 
|           if (!listeners) { | 
|             return; | 
|           } | 
|           for (key in listeners) { | 
|             l = listeners[key]; | 
|             if (l && listeners.hasOwnProperty(key)) { | 
|               google.maps.event.removeListener(l); | 
|             } | 
|           } | 
|         } | 
|       }; | 
|     } | 
|   ]); | 
|   | 
| }).call(this); | 
| ; | 
| /* | 
| @authors: | 
| - Nicholas McCready - https://twitter.com/nmccready | 
|  */ | 
|   | 
|   | 
| /* | 
| StreetViewPanorama Directive to care of basic initialization of StreetViewPanorama | 
|  */ | 
|   | 
| (function() { | 
|   angular.module('uiGmapgoogle-maps').directive('uiGmapStreetViewPanorama', [ | 
|     'uiGmapGoogleMapApi', 'uiGmapLogger', 'uiGmapGmapUtil', 'uiGmapEventsHelper', function(GoogleMapApi, $log, GmapUtil, EventsHelper) { | 
|       var name; | 
|       name = 'uiGmapStreetViewPanorama'; | 
|       return { | 
|         restrict: 'EMA', | 
|         template: '<div class="angular-google-map-street-view-panorama"></div>', | 
|         replace: true, | 
|         scope: { | 
|           focalcoord: '=', | 
|           radius: '=?', | 
|           events: '=?', | 
|           options: '=?', | 
|           control: '=?', | 
|           povoptions: '=?', | 
|           imagestatus: '=' | 
|         }, | 
|         link: function(scope, element, attrs) { | 
|           return GoogleMapApi.then((function(_this) { | 
|             return function(maps) { | 
|               var clean, create, didCreateOptionsFromDirective, firstTime, handleSettings, listeners, opts, pano, povOpts, sv; | 
|               pano = void 0; | 
|               sv = void 0; | 
|               didCreateOptionsFromDirective = false; | 
|               listeners = void 0; | 
|               opts = null; | 
|               povOpts = null; | 
|               clean = function() { | 
|                 EventsHelper.removeEvents(listeners); | 
|                 if (pano != null) { | 
|                   pano.unbind('position'); | 
|                   pano.setVisible(false); | 
|                 } | 
|                 if (sv != null) { | 
|                   if ((sv != null ? sv.setVisible : void 0) != null) { | 
|                     sv.setVisible(false); | 
|                   } | 
|                   return sv = void 0; | 
|                 } | 
|               }; | 
|               handleSettings = function(perspectivePoint, focalPoint) { | 
|                 var heading; | 
|                 heading = google.maps.geometry.spherical.computeHeading(perspectivePoint, focalPoint); | 
|                 didCreateOptionsFromDirective = true; | 
|                 scope.radius = scope.radius || 50; | 
|                 povOpts = angular.extend({ | 
|                   heading: heading, | 
|                   zoom: 1, | 
|                   pitch: 0 | 
|                 }, scope.povoptions || {}); | 
|                 opts = opts = angular.extend({ | 
|                   navigationControl: false, | 
|                   addressControl: false, | 
|                   linksControl: false, | 
|                   position: perspectivePoint, | 
|                   pov: povOpts, | 
|                   visible: true | 
|                 }, scope.options || {}); | 
|                 return didCreateOptionsFromDirective = false; | 
|               }; | 
|               create = function() { | 
|                 var focalPoint; | 
|                 if (!scope.focalcoord) { | 
|                   $log.error(name + ": focalCoord needs to be defined"); | 
|                   return; | 
|                 } | 
|                 if (!scope.radius) { | 
|                   $log.error(name + ": needs a radius to set the camera view from its focal target."); | 
|                   return; | 
|                 } | 
|                 clean(); | 
|                 if (sv == null) { | 
|                   sv = new google.maps.StreetViewService(); | 
|                 } | 
|                 if (scope.events) { | 
|                   listeners = EventsHelper.setEvents(sv, scope, scope); | 
|                 } | 
|                 focalPoint = GmapUtil.getCoords(scope.focalcoord); | 
|                 return sv.getPanoramaByLocation(focalPoint, scope.radius, function(streetViewPanoramaData, status) { | 
|                   var ele, perspectivePoint, ref; | 
|                   if (scope.imagestatus != null) { | 
|                     scope.imagestatus = status; | 
|                   } | 
|                   if (((ref = scope.events) != null ? ref.image_status_changed : void 0) != null) { | 
|                     scope.events.image_status_changed(sv, 'image_status_changed', scope, status); | 
|                   } | 
|                   if (status === "OK") { | 
|                     perspectivePoint = streetViewPanoramaData.location.latLng; | 
|                     handleSettings(perspectivePoint, focalPoint); | 
|                     ele = element[0]; | 
|                     return pano = new google.maps.StreetViewPanorama(ele, opts); | 
|                   } | 
|                 }); | 
|               }; | 
|               if (scope.control != null) { | 
|                 scope.control.getOptions = function() { | 
|                   return opts; | 
|                 }; | 
|                 scope.control.getPovOptions = function() { | 
|                   return povOpts; | 
|                 }; | 
|                 scope.control.getGObject = function() { | 
|                   return sv; | 
|                 }; | 
|                 scope.control.getGPano = function() { | 
|                   return pano; | 
|                 }; | 
|               } | 
|               scope.$watch('options', function(newValue, oldValue) { | 
|                 if (newValue === oldValue || newValue === opts || didCreateOptionsFromDirective) { | 
|                   return; | 
|                 } | 
|                 return create(); | 
|               }); | 
|               firstTime = true; | 
|               scope.$watch('focalcoord', function(newValue, oldValue) { | 
|                 if (newValue === oldValue && !firstTime) { | 
|                   return; | 
|                 } | 
|                 if (newValue == null) { | 
|                   return; | 
|                 } | 
|                 firstTime = false; | 
|                 return create(); | 
|               }); | 
|               return scope.$on('$destroy', function() { | 
|                 return clean(); | 
|               }); | 
|             }; | 
|           })(this)); | 
|         } | 
|       }; | 
|     } | 
|   ]); | 
|   | 
| }).call(this); | 
| }( window,angular)); |