{"version":3,"sources":["gmaps.js","markerclusterer-custom.js","ion.rangeSlider.js","sticky-sidebar.min.js","resizeSensor.js","cloud-zoom.1.0.2.5.js","spritespin.js","jquery.ui.touch-punch.min.js"],"names":["ClusterIcon","cluster","styles","getMarkerClusterer","extend","google","maps","OverlayView","this","cluster_","className_","getClusterClass","styles_","center_","div_","sums_","visible_","setMap","getMap","Cluster","mc","markerClusterer_","map_","gridSize_","getGridSize","minClusterSize_","getMinimumClusterSize","averageCenter_","getAverageCenter","markers_","bounds_","clusterIcon_","getStyles","MarkerClusterer","map","opt_markers","opt_options","clusters_","listeners_","activeMap_","ready_","gridSize","minimumClusterSize","maxZoom_","maxZoom","title_","title","zoomOnClick_","undefined","zoomOnClick","averageCenter","ignoreHidden_","ignoreHidden","enableRetinaIcons_","enableRetinaIcons","imagePath_","imagePath","IMAGE_PATH","imageExtension_","imageExtension","IMAGE_EXTENSION","imageSizes_","imageSizes","IMAGE_SIZES","calculator_","calculator","CALCULATOR","batchSize_","batchSize","BATCH_SIZE","batchSizeIE_","batchSizeIE","BATCH_SIZE_IE","clusterClass_","clusterClass","navigator","userAgent","toLowerCase","indexOf","setupStyles_","addMarkers","root","factory","exports","module","define","amd","GMaps","travelMode","unitSystem","extend_object","obj","new_obj","name","array_map","array","callback","i","original_callback_params","Array","prototype","slice","call","arguments","array_return","array_length","length","item","callback_params","splice","apply","push","array_flat","new_array","concat","coordsToLatLngs","coords","useGeoJSON","first_coord","second_coord","LatLng","arrayToLatLng","getElementById","id","context","replace","window","$","document","global","doc","options","console","error","zoom","mapType","valueOrDefault","value","defaultValue","self","events_that_hide_context_menu","events_that_doesnt_hide_context_menu","options_to_be_deleted","identifier","el","div","markerClustererFunction","markerClusterer","MapTypeId","toUpperCase","map_center","lat","lng","zoomControl","zoomControlOpt","style","position","zoomControlStyle","zoomControlPosition","panControl","mapTypeControl","scaleControl","streetViewControl","overviewMapControl","map_options","map_base_options","center","mapTypeId","map_controls_options","zoomControlOptions","ZoomControlStyle","ControlPosition","class_name","_class","getElementsByClassName","context_menu","controls","overlays","layers","singleLayers","markers","polylines","routes","polygons","infoWindow","overlay_el","registered_events","width","scrollWidth","offsetWidth","height","scrollHeight","offsetHeight","visualRefresh","enableNewStyle","disableDefaultUI","Map","buildContextMenuHTML","control","e","html","hasOwnProperty","option","context_menu_element","innerHTML","context_menu_items","getElementsByTagName","context_menu_items_count","context_menu_item","event","clearListeners","addDomListenerOnce","ev","preventDefault","action","hideContextMenu","curleft","curtop","getBoundingClientRect","rect","sx","scrollX","pageXOffset","sy","scrollY","pageYOffset","left","top","offsetParent","offsetLeft","offsetTop","pixel","x","y","buildContextMenu","overlay","draw","projection","getProjection","marker","getPosition","fromLatLngToContainerPixel","setTimeout","display","setContextMenu","ul","createElement","minWidth","background","listStyle","padding","boxShadow","body","appendChild","addDomListener","relatedTarget","contains","setupListener","object","addListener","rightclick","refresh","trigger","fitZoom","latLngs","markers_length","visible","fitLatLngBounds","total","bounds","LatLngBounds","fitBounds","setCenter","panTo","getElement","zoomIn","getZoom","setZoom","zoomOut","method","native_methods","gmaps","scope","method_name","createControl","cursor","disableDefaultStyles","fontFamily","fontSize","classes","className","content","HTMLElement","events","index","addControl","removeControl","controlsForPosition","getAt","removeAt","createMarker","details","fences","outside","base_options","marker_options","Marker","InfoWindow","info_window_events","marker_events","marker_events_with_mouse","me","fromLatLngToPoint","latLng","click","hideInfoWindows","open","checkMarkerGeofence","m","f","addMarker","fire","close","removeMarker","removeMarkers","collection","new_markers","clearMarkers","drawOverlay","auto_show","onAdd","borderStyle","borderWidth","zIndex","layer","panes","getPanes","stop_overlay_events","all","cancelBubble","returnValue","stopPropagation","overlayMouseTarget","fromLatLngToDivPixel","horizontalOffset","verticalOffset","children","content_height","clientHeight","content_width","clientWidth","verticalAlign","horizontalAlign","show","onRemove","remove","parentNode","removeChild","removeOverlay","removeOverlays","drawPolyline","path","points","latlng","polyline_options","strokeColor","strokeOpacity","strokeWeight","geodesic","clickable","editable","icons","polyline","Polyline","polyline_events","removePolyline","removePolylines","drawCircle","polygon","Circle","polygon_events","drawRectangle","latLngBounds","Rectangle","drawPolygon","paths","Polygon","removePolygon","removePolygons","getFromFusionTables","fusion_tables_options","FusionTablesLayer","loadFromFusionTables","getFromKML","url","kml_options","KmlLayer","loadFromKML","addLayer","layerName","weather","WeatherLayer","clouds","CloudLayer","traffic","TrafficLayer","transit","TransitLayer","bicycling","BicyclingLayer","panoramio","PanoramioLayer","setTag","filter","places","PlacesService","search","nearbySearch","radarSearch","placeSearchRequest","keyword","location","radius","rankBy","types","textSearch","textSearchRequest","query","setOptions","removeLayer","getRoutes","TravelMode","BICYCLING","TRANSIT","DRIVING","WALKING","UnitSystem","IMPERIAL","METRIC","request_options","avoidHighways","avoidTolls","optimizeWaypoints","waypoints","origin","test","destination","DirectionsService","route","result","status","DirectionsStatus","OK","r","removeRoutes","getElevations","locations","samples","service","ElevationService","pathRequest","getElevationAlongPath","getElevationForLocations","cleanRoute","renderRoute","renderOptions","panel","DirectionsRenderer","response","setDirections","drawRoute","overview_path","travelRoute","start","step","legs","steps","step_number","end","drawSteppedRoute","Route","step_count","steps_length","MVCArray","getPath","getRoute","back","p","pop","forward","checkGeofence","fence","containsLatLng","outside_callback","pos","toImage","static_map_options","getCenter","geometry","encoding","encodePath","staticMapURL","data","parameters","static_root","protocol","address","join","encodeURI","size","sensor","param","loc","icon","color","label","styleRule","featureType","elementType","j","stylers","ruleArg","substring","rule","parseColor","opacity","parseFloat","Math","min","max","toString","parseInt","fillColor","fillcolor","fillOpacity","dpi","devicePixelRatio","addMapType","tileSize","Size","ImageMapType","mapTypes","set","addOverlayMapType","overlayMapTypeIndex","overlayMapTypes","insertAt","removeOverlayMapType","addStyle","styledMapType","StyledMapType","styledMapName","setStyle","setMapTypeId","createPanorama","streetview_options","panorama","setStreetView","streetview_events","StreetViewPanorama","on","event_name","handler","off","once","custom_events","registered_event","eventName","addListenerOnce","firing_events","geolocate","complete_callback","always","complete","geolocation","getCurrentPosition","success","not_supported","geocode","geocoder","Geocoder","results","getBounds","getPaths","getLength","inPoly","numPaths","numPoints","vertex1","vertex2","spherical","computeDistanceBetween","getRadius","setFences","addFence","getId","searchElement","TypeError","t","Object","len","n","Number","Infinity","floor","abs","k","cMouseDownInCluster","cDraggingMapByCluster","cClusterIcon","gmVersion","version","split","boundsChangedListener_","theBounds","mz","getZoomOnClick","getMaxZoom","hide","removeListener","clearInstanceListeners","getPosFromLatLng_","MAX_ZINDEX","img","bp","backgroundPosition_","spriteH","spriteV","cssText","createCss","url_","width_","height_","anchorText_","textColor_","textSize_","fontFamily_","fontWeight_","fontStyle_","textDecoration_","text","getTitle","useStyle","sums","anchorText","anchorIcon_","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","backgroundPosition","getSize","getMarkers","mCount","isMarkerAlreadyAdded_","l","calculateBounds_","isAdded","updateIcon_","isMarkerInClusterBounds","getExtendedBounds","numStyles","getCalculator","cMarkerClusterer","repaint","prevZoom_","minZoom","getMapTypeId","resetViewport_","bind","redraw_","fitMapToMarkers","getVisible","getIgnoreHidden","setGridSize","setMinimumClusterSize","setMaxZoom","setStyles","setTitle","setZoomOnClick","setAverageCenter","setIgnoreHidden","getEnableRetinaIcons","setEnableRetinaIcons","getImageExtension","setImageExtension","getImagePath","setImagePath","getImageSizes","setImageSizes","setCalculator","getBatchSizeIE","setBatchSizeIE","setClusterClass","getTotalMarkers","getClusters","getTotalClusters","opt_nodraw","pushMarkerTo_","key","getDraggable","removed","removeMarker_","oldClusters","tr","getNorthEast","bl","getSouthWest","trPix","blPix","ne","fromDivPixelToLatLng","sw","createClusters_","opt_hide","distanceBetweenPoints_","p1","p2","dLat","PI","dLon","a","sin","cos","atan2","sqrt","isMarkerInBounds_","addToClosestCluster_","d","distance","clusterToAddTo","iFirst","mapBounds","timerRefStatic","clearTimeout","iLast","obj1","obj2","property","count","dv","jQuery","require","plugin_count","is_old_ie","exec","addClass","Function","that","target","args","bound","F","fromIndex","O","IonRangeSlider","input","VERSION","current_plugin","calc_count","update_tm","old_from","old_to","old_min_interval","raf_id","dragging","force_redraw","no_diapason","has_tab_index","is_key","is_update","is_start","is_finish","is_active","is_resize","is_click","$cache","win","cont","rs","from","to","single","bar","line","s_single","s_from","s_to","shad_single","shad_from","shad_to","edge","grid","grid_labels","x_gap","x_pointer","w_rs","w_rs_old","w_handle","p_gap","p_gap_left","p_gap_right","p_step","p_pointer","p_handle","p_single_fake","p_single_real","p_from_fake","p_from_real","p_to_fake","p_to_real","p_bar_x","p_bar_w","grid_gap","big_num","big","big_w","big_p","big_x","labels","w_min","w_max","w_from","w_to","w_single","p_min","p_max","p_from_left","p_to_left","p_single_left","config","config_from_data","prop","$inp","val","skin","type","min_interval","max_interval","drag_interval","values","p_values","from_fixed","from_min","from_max","from_shadow","to_fixed","to_min","to_max","to_shadow","prettify_enabled","prettify_separator","prettify","force_edges","keyboard","grid_margin","grid_num","grid_snap","hide_min_max","hide_from_to","prefix","postfix","max_postfix","decorate_both","values_separator","input_values_separator","disable","block","extra_classes","onStart","onChange","onFinish","onUpdate","nodeName","warn","update_check","validate","slider","from_percent","from_value","to_percent","to_value","init","convertToPercent","toggleInput","append","setMinMax","calc","callOnUpdate","callOnStart","updateScene","container_html","before","prev","find","visibility","setTopHandler","appendGrid","appendDisableMask","disabled","removeDisableMask","bindEvents","changeLevel","toFixed","removeClass","cancelAnimationFrame","pointerMove","pointerUp","pointerClick","pointerFocus","pointerDown","$handle","offset","pageX","originalEvent","touches","restoreOriginalMinInterval","callOnFinish","button","setTempMinInterval","calcPointerPercent","altKey","ctrlKey","shiftKey","metaKey","which","moveByKey","right","decorate","min_pretty","_prettify","max_pretty","outerWidth","interval","update","calcHandlePercent","handle_x","getHandleX","chooseHandle","w","checkDiapason","convertToFakePercent","convertToRealPercent","calcWithStep","checkMinInterval","checkMaxInterval","real_x","full","half","new_from","new_to","convertToValue","from_pretty","to_pretty","calcMinMax","calcLabels","isNaN","fake","real","checkEdges","drawHandles","requestAnimationFrame","drawLabels","calcGridMargin","calcGridLabels","drawShadow","writeToInput","callOnChange","text_single","text_from","text_to","values_num","single_left","to_left","hasClass","o","c","is_from_min","is_from_max","is_to_min","is_to_max","toggleClass","removeProp","no_min","percent","diapason","one_percent","min_length","max_length","min_decimals","max_decimals","avg_decimals","number","string","rounded","round","p_current","p_next","current","next","p_num","num","v","vl","original","decorated","updateFrom","updateTo","updateResult","z","local_small_max","small_p","small_max","ceil","cacheGridLabels","$label","finish","calcGridCollision","POSITIVE_INFINITY","marginLeft","next_i","reset","destroy","fn","ionRangeSlider","each","lastTime","vendors","element","currTime","Date","getTime","timeToCall","StickySidebar","defineProperty","enumerable","configurable","writable","topSpacing","bottomSpacing","containerSelector","innerWrapperSelector","stickyClass","resizeSensor","sidebar","querySelector","Error","sidebarInner","container","parentElement","affixedType","direction","support","transform","transform3d","_initialized","_reStyle","_breakpoint","dimensions","translateY","maxTranslateY","lastTopSpacing","lastBottomSpacing","sidebarHeight","sidebarWidth","containerTop","containerHeight","viewportHeight","viewportTop","lastViewportTop","forEach","initialize","_setSupportFeatures","setAttribute","firstChild","querySelectorAll","_widthBreakpoint","calcDimensions","stickyPosition","addEventListener","passive","capture","ResizeSensor","handleEvent","updateSticky","offsetRelative","containerBottom","innerHeight","_calcDimensionsWithScroll","sidebarLeft","documentElement","scrollTop","viewportBottom","viewportLeft","scrollLeft","scrollDirection","_getAffixTypeScrollingUp","_getAffixTypeScrollingDown","isSidebarFitsViewport","inner","outer","bottom","_getTranslate","getAffixType","_getStyle","eventTrigger","s","innerWidth","removeAttribute","_running","observeScrollDir","supportTransform","translate","removeEventListener","classList","minHeight","detach","charAt","CustomEvent","detail","createEvent","initCustomEvent","dispatchEvent","tagName","add","RegExp","get","default","__esModule","__moduleExports","globalWindow","mozRequestAnimationFrame","webkitRequestAnimationFrame","forEachElement","elements","elementsType","isCollectionTyped","Elements","getElementSize","keys","lastAnimationFrame","EventQueue","q","sizeInfo","newQueue","attachResizeEvent","resized","resizedAttached","dir","pointerEvents","overflow","maxWidth","styleChild","transition","expand","expandChild","shrink","shrinkChild","dirty","rafId","computedStyle","getComputedStyle","getPropertyValue","lastWidth","lastHeight","initialHiddenCheck","resetSensor","onResized","onScroll","addEvent","cb","attachEvent","elem","MutationObserver","observer","mutations","items","addedNodes","observe","childList","subtree","format","str","CloudZoom","jWin","opts","img1","img2","zoomImage","cw","ch","mx","my","zw","sImg","zoomDiv","$mouseTrap","lens","$tint","softFocus","$ie6Fix","controlTimer","destU","destV","currV","currU","filesLoaded","ctx","parent","removeBits","unbind","fadedOut","controlLoop","outerHeight","css","smoothMove","init2","transparentImage","pageY","fadeOut","stop","xPos","adjustX","yPos","adjustY","siw","sih","zoomWidth","h","zoomHeight","appendTo","customAppendTo","src","attr","showTitle","titleOpacity","browserCheck","insertBefore","fadeIn","noTrans","tint","tintOpacity","lensOpacity","Image","execCommand","relOpts","prevOpts","defaults","is","useWrapper","wrap","useZoom","smallImage","SpriteSpin","Api","extendApi","methods","api","canvas","$$1","getCursorPosition","source","clientX","clientY","detectSubsampling","getContext","fillStyle","fillRect","drawImage","dat","getImageData","err","getOuterSize","frameWidth","frameHeight","aspect","getComputedSize","getInnerSize","getInnerLayout","mode","isFit","isFill","layout","aspectIsGreater","naturalSize","image","naturalWidth","naturalHeight","crossOrigin","measure","images","measureSheet","framesX","framesY","sheet","frames","measureMutipleSheets","measureFrames","sprites","isSubsampled","sampledWidth","sampledHeight","measureImage","divisor","sampledX","sampledY","findSpecs","metrics","frame","lane","spriteId","sheetId","sprite","arr","noop","preload","targetCount","preloadCount","onInitiated","initiated","onProgress","progress","onComplete","completed","firstLoaded","tick","loaded","_i","src_1","onload","onabort","onerror","padNumber","pad","String","sourceArray","template","digits","lPlacer","lanePlacer","fPlacer","framePlacer","fStart","fEnd","lStart","lEnd","namespace","eventNames","callbackNames","eventsToPrevent","lanes","sizeMode","renderer","frameTime","animate","retainAnimate","reverse","loop","stopFrame","wrapLane","sense","senseLane","orientation","touchScrollTimer","responsive","plugins","noop$1","wrapConsole","log","toArray","isArray","clamp","prevent","func","spritespin","pixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","applyLayout","-ms-user-select","-moz-user-select","-khtml-user-select","-webkit-user-select","user-select","stage","canvasRatio","scale","getState","state","getPluginState","flag","getPlaybackState","updateAnimation","updateBefore","stopAnimation","updateAnimationFrame","updateAfter","lastFrame","lastLane","updateFrame","updateInputFrame","updateLane","clearInterval","applyAnimation","setInterval","startAnimation","registerPlugin","plugin","getPlugin","applyPlugins","fixPlugins","name_1","$$2","counter","instances","eachInstance","lazyinit","onResize","boot","_loop_1","_a","module_1","onEvent","eventNames_1","resizeTimeout","applyEvents","eventsToPrevent_1","eName","_b","_c","eventNames_2","_d","callbackNames_1","_e","callbackNames_2","loading","spec","applyMetrics","create","_this","empty","pushInstance","createOrUpdate","popInstance","removeData","getInputState","updateInput","oldX","currentX","oldY","currentY","startX","startY","clickframe","clicklane","dX","dY","ddX","ddY","ndX","ndY","nddX","nddY","resetInput","pick","names","names_1","$target","isPlaying","isLooping","toggleAnimation","currentFrame","skipFrames","nextFrame","prevFrame","playTo","force","nearest","b","browser","requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror","changeEvent","unbindChangeEvent","orientationEvent","unbindOrientationEvent","isFullscreen","oWidth","oHeight","oSource","oSize","oResponsive","enter","screen","toggleFullscreen","apiRequestFullscreen","mouseup","touchend","NAME","getState$$1","onInit","minTime","maxTime","dragStart","now","endAt","startAt","wasPlaying","dragEnd","drag","rad","getAxis","sn","cs","mousedown","mousemove","documentmousemove","documentmouseup","touchstart","touchmove","touchcancel","mouseleave","rememberOptions","restoreOptions","delta","onFrame","getOption","fallback","dS","dF","snap","fling","onLoad","wheel","we","signX","deltaX","signY","deltaY","text-align","onDestroy","onDraw","specs","clearRect","scaleX","scaleY","max-width","background-image","background-position","background-repeat","-webkit-background-size","-moz-background-size","-o-background-size","background-size","toRemove","timeout","killLoop","clearFrame","live","alpha","drawFrame","cssBlur","blur","-webkit-filter","applyCssBlur","toRemove_1","removeOldFrames","globalAlpha","fadeTime","trackTime","onFrameChanged","ani","unshift","trackFrame","time","maxSamples","shift","sampleInput","last","samples_1","sample","dt","abortTime","laneStep","updateTime","frameStep","damping","offsets","speed","prependTo","naturalSize$$1","innerSize","outerSize","duration","isDragging","px","py","updateInput$$1","pinFrame","dx","dy","match","onClick","useClick","clickTime","doubleClickTime","toggleZoom","onMove","showZoom","hideZoom","useWheel","top_1","Utils","isFunction","registerModule","changedTouches","initMouseEvent","screenX","screenY","touch","ui","mouse","_mouseInit","_mouseDestroy","_touchStart","_mouseCapture","_touchMoved","_touchMove","_touchEnd","proxy"],"mappings":"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","file":"plugins-products.js","sourcesContent":["\"use strict\";\n(function (root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory();\n }\n else if (typeof define === 'function' && define.amd) {\n define(['jquery', 'googlemaps!'], factory);\n }\n else {\n root.GMaps = factory();\n }\n\n\n}(this, function () {\n\n /*!\n * GMaps.js v0.4.25\n * http://hpneo.github.com/gmaps/\n *\n * Copyright 2017, Gustavo Leon\n * Released under the MIT License.\n */\n\n var extend_object = function (obj, new_obj) {\n var name;\n\n if (obj === new_obj) {\n return obj;\n }\n\n for (name in new_obj) {\n if (new_obj[name] !== undefined) {\n obj[name] = new_obj[name];\n }\n }\n\n return obj;\n };\n\n var replace_object = function (obj, replace) {\n var name;\n\n if (obj === replace) {\n return obj;\n }\n\n for (name in replace) {\n if (obj[name] != undefined) {\n obj[name] = replace[name];\n }\n }\n\n return obj;\n };\n\n var array_map = function (array, callback) {\n var original_callback_params = Array.prototype.slice.call(arguments, 2),\n array_return = [],\n array_length = array.length,\n i;\n\n if (Array.prototype.map && array.map === Array.prototype.map) {\n array_return = Array.prototype.map.call(array, function (item) {\n var callback_params = original_callback_params.slice(0);\n callback_params.splice(0, 0, item);\n\n return callback.apply(this, callback_params);\n });\n }\n else {\n for (i = 0; i < array_length; i++) {\n var callback_params = original_callback_params;\n callback_params.splice(0, 0, array[i]);\n array_return.push(callback.apply(this, callback_params));\n }\n }\n\n return array_return;\n };\n\n var array_flat = function (array) {\n var new_array = [],\n i;\n\n for (i = 0; i < array.length; i++) {\n new_array = new_array.concat(array[i]);\n }\n\n return new_array;\n };\n\n var coordsToLatLngs = function (coords, useGeoJSON) {\n var first_coord = coords[0],\n second_coord = coords[1];\n\n if (useGeoJSON) {\n first_coord = coords[1];\n second_coord = coords[0];\n }\n\n return new google.maps.LatLng(first_coord, second_coord);\n };\n\n var arrayToLatLng = function (coords, useGeoJSON) {\n var i;\n\n for (i = 0; i < coords.length; i++) {\n if (!(coords[i] instanceof google.maps.LatLng)) {\n if (coords[i].length > 0 && typeof (coords[i][0]) === \"object\") {\n coords[i] = arrayToLatLng(coords[i], useGeoJSON);\n }\n else {\n coords[i] = coordsToLatLngs(coords[i], useGeoJSON);\n }\n }\n }\n\n return coords;\n };\n\n var getElementsByClassName = function (class_name, context) {\n var element,\n _class = class_name.replace('.', '');\n\n if ('jQuery' in this && context) {\n element = $(\".\" + _class, context)[0];\n } else {\n element = document.getElementsByClassName(_class)[0];\n }\n return element;\n\n };\n\n var getElementById = function (id, context) {\n var element,\n id = id.replace('#', '');\n\n if ('jQuery' in window && context) {\n element = $('#' + id, context)[0];\n } else {\n element = document.getElementById(id);\n };\n\n return element;\n };\n\n var findAbsolutePosition = function (obj) {\n var curleft = 0,\n curtop = 0;\n\n if (obj.getBoundingClientRect) {\n var rect = obj.getBoundingClientRect();\n var sx = -(window.scrollX ? window.scrollX : window.pageXOffset);\n var sy = -(window.scrollY ? window.scrollY : window.pageYOffset);\n\n return [(rect.left - sx), (rect.top - sy)];\n }\n\n if (obj.offsetParent) {\n do {\n curleft += obj.offsetLeft;\n curtop += obj.offsetTop;\n } while (obj = obj.offsetParent);\n }\n\n return [curleft, curtop];\n };\n\n var GMaps = (function (global) {\n \"use strict\";\n\n var doc = document;\n /**\n * Creates a new GMaps instance, including a Google Maps map.\n * @class GMaps\n * @constructs\n * @param {object} options - `options` accepts all the [MapOptions](https://developers.google.com/maps/documentation/javascript/reference#MapOptions) and [events](https://developers.google.com/maps/documentation/javascript/reference#Map) listed in the Google Maps API. Also accepts:\n * * `lat` (number): Latitude of the map's center\n * * `lng` (number): Longitude of the map's center\n * * `el` (string or HTMLElement): container where the map will be rendered\n * * `markerClusterer` (function): A function to create a marker cluster. You can use MarkerClusterer or MarkerClustererPlus.\n */\n var GMaps = function (options) {\n\n if (!(typeof window.google === 'object' && window.google.maps)) {\n if (typeof window.console === 'object' && window.console.error) {\n console.error('Google Maps API is required. Please register the following JavaScript library https://maps.googleapis.com/maps/api/js.');\n }\n\n return function () { };\n }\n\n if (!this) return new GMaps(options);\n\n options.zoom = options.zoom || 15;\n options.mapType = options.mapType || 'roadmap';\n\n var valueOrDefault = function (value, defaultValue) {\n return value === undefined ? defaultValue : value;\n };\n\n var self = this,\n i,\n events_that_hide_context_menu = [\n 'bounds_changed', 'center_changed', 'click', 'dblclick', 'drag',\n 'dragend', 'dragstart', 'idle', 'maptypeid_changed', 'projection_changed',\n 'resize', 'tilesloaded', 'zoom_changed'\n ],\n events_that_doesnt_hide_context_menu = ['mousemove', 'mouseout', 'mouseover'],\n options_to_be_deleted = ['el', 'lat', 'lng', 'mapType', 'width', 'height', 'markerClusterer', 'enableNewStyle'],\n identifier = options.el || options.div,\n markerClustererFunction = options.markerClusterer,\n mapType = google.maps.MapTypeId[options.mapType.toUpperCase()],\n map_center = new google.maps.LatLng(options.lat, options.lng),\n zoomControl = valueOrDefault(options.zoomControl, true),\n zoomControlOpt = options.zoomControlOpt || {\n style: 'DEFAULT',\n position: 'TOP_LEFT'\n },\n zoomControlStyle = zoomControlOpt.style || 'DEFAULT',\n zoomControlPosition = zoomControlOpt.position || 'TOP_LEFT',\n panControl = valueOrDefault(options.panControl, true),\n mapTypeControl = valueOrDefault(options.mapTypeControl, true),\n scaleControl = valueOrDefault(options.scaleControl, true),\n streetViewControl = valueOrDefault(options.streetViewControl, true),\n overviewMapControl = valueOrDefault(overviewMapControl, true),\n map_options = {},\n map_base_options = {\n zoom: this.zoom,\n center: map_center,\n mapTypeId: mapType\n },\n map_controls_options = {\n panControl: panControl,\n zoomControl: zoomControl,\n zoomControlOptions: {\n style: google.maps.ZoomControlStyle[zoomControlStyle],\n position: google.maps.ControlPosition[zoomControlPosition]\n },\n mapTypeControl: mapTypeControl,\n scaleControl: scaleControl,\n streetViewControl: streetViewControl,\n overviewMapControl: overviewMapControl\n };\n\n if (typeof (options.el) === 'string' || typeof (options.div) === 'string') {\n if (identifier.indexOf(\"#\") > -1) {\n /**\n * Container element\n *\n * @type {HTMLElement}\n */\n this.el = getElementById(identifier, options.context);\n } else {\n this.el = getElementsByClassName.apply(this, [identifier, options.context]);\n }\n } else {\n this.el = identifier;\n }\n\n if (typeof (this.el) === 'undefined' || this.el === null) {\n throw 'No element defined.';\n }\n\n window.context_menu = window.context_menu || {};\n window.context_menu[self.el.id] = {};\n\n /**\n * Collection of custom controls in the map UI\n *\n * @type {array}\n */\n this.controls = [];\n /**\n * Collection of map's overlays\n *\n * @type {array}\n */\n this.overlays = [];\n /**\n * Collection of KML/GeoRSS and FusionTable layers\n *\n * @type {array}\n */\n this.layers = [];\n /**\n * Collection of data layers (See {@link GMaps#addLayer})\n *\n * @type {object}\n */\n this.singleLayers = {};\n /**\n * Collection of map's markers\n *\n * @type {array}\n */\n this.markers = [];\n /**\n * Collection of map's lines\n *\n * @type {array}\n */\n this.polylines = [];\n /**\n * Collection of map's routes requested by {@link GMaps#getRoutes}, {@link GMaps#renderRoute}, {@link GMaps#drawRoute}, {@link GMaps#travelRoute} or {@link GMaps#drawSteppedRoute}\n *\n * @type {array}\n */\n this.routes = [];\n /**\n * Collection of map's polygons\n *\n * @type {array}\n */\n this.polygons = [];\n this.infoWindow = null;\n this.overlay_el = null;\n /**\n * Current map's zoom\n *\n * @type {number}\n */\n this.zoom = options.zoom;\n this.registered_events = {};\n\n this.el.style.width = options.width || this.el.scrollWidth || this.el.offsetWidth;\n this.el.style.height = options.height || this.el.scrollHeight || this.el.offsetHeight;\n\n google.maps.visualRefresh = options.enableNewStyle;\n\n for (i = 0; i < options_to_be_deleted.length; i++) {\n delete options[options_to_be_deleted[i]];\n }\n\n if (options.disableDefaultUI != true) {\n map_base_options = extend_object(map_base_options, map_controls_options);\n }\n\n map_options = extend_object(map_base_options, options);\n\n for (i = 0; i < events_that_hide_context_menu.length; i++) {\n delete map_options[events_that_hide_context_menu[i]];\n }\n\n for (i = 0; i < events_that_doesnt_hide_context_menu.length; i++) {\n delete map_options[events_that_doesnt_hide_context_menu[i]];\n }\n\n /**\n * Google Maps map instance\n *\n * @type {google.maps.Map}\n */\n this.map = new google.maps.Map(this.el, map_options);\n\n if (markerClustererFunction) {\n /**\n * Marker Clusterer instance\n *\n * @type {object}\n */\n this.markerClusterer = markerClustererFunction.apply(this, [this.map]);\n }\n\n var buildContextMenuHTML = function (control, e) {\n var html = '',\n options = window.context_menu[self.el.id][control];\n\n for (var i in options) {\n if (options.hasOwnProperty(i)) {\n var option = options[i];\n\n html += '
  • ' + option.title + '
  • ';\n }\n }\n\n if (!getElementById('gmaps_context_menu')) return;\n\n var context_menu_element = getElementById('gmaps_context_menu');\n\n context_menu_element.innerHTML = html;\n\n var context_menu_items = context_menu_element.getElementsByTagName('a'),\n context_menu_items_count = context_menu_items.length,\n i;\n\n for (i = 0; i < context_menu_items_count; i++) {\n var context_menu_item = context_menu_items[i];\n\n var assign_menu_item_action = function (ev) {\n ev.preventDefault();\n\n options[this.id.replace(control + '_', '')].action.apply(self, [e]);\n self.hideContextMenu();\n };\n\n google.maps.event.clearListeners(context_menu_item, 'click');\n google.maps.event.addDomListenerOnce(context_menu_item, 'click', assign_menu_item_action, false);\n }\n\n var position = findAbsolutePosition.apply(this, [self.el]),\n left = position[0] + e.pixel.x - 15,\n top = position[1] + e.pixel.y - 15;\n\n context_menu_element.style.left = left + \"px\";\n context_menu_element.style.top = top + \"px\";\n\n // context_menu_element.style.display = 'block';\n };\n\n this.buildContextMenu = function (control, e) {\n if (control === 'marker') {\n e.pixel = {};\n\n var overlay = new google.maps.OverlayView();\n overlay.setMap(self.map);\n\n overlay.draw = function () {\n var projection = overlay.getProjection(),\n position = e.marker.getPosition();\n\n e.pixel = projection.fromLatLngToContainerPixel(position);\n\n buildContextMenuHTML(control, e);\n };\n }\n else {\n buildContextMenuHTML(control, e);\n }\n\n var context_menu_element = getElementById('gmaps_context_menu');\n\n setTimeout(function () {\n context_menu_element.style.display = 'block';\n }, 0);\n };\n\n /**\n * Add a context menu for a map or a marker.\n *\n * @param {object} options - The `options` object should contain:\n * * `control` (string): Kind of control the context menu will be attached. Can be \"map\" or \"marker\".\n * * `options` (array): A collection of context menu items:\n * * `title` (string): Item's title shown in the context menu.\n * * `name` (string): Item's identifier.\n * * `action` (function): Function triggered after selecting the context menu item.\n */\n this.setContextMenu = function (options) {\n window.context_menu[self.el.id][options.control] = {};\n\n var i,\n ul = doc.createElement('ul');\n\n for (i in options.options) {\n if (options.options.hasOwnProperty(i)) {\n var option = options.options[i];\n\n window.context_menu[self.el.id][options.control][option.name] = {\n title: option.title,\n action: option.action\n };\n }\n }\n\n ul.id = 'gmaps_context_menu';\n ul.style.display = 'none';\n ul.style.position = 'absolute';\n ul.style.minWidth = '100px';\n ul.style.background = 'white';\n ul.style.listStyle = 'none';\n ul.style.padding = '8px';\n ul.style.boxShadow = '2px 2px 6px #ccc';\n\n if (!getElementById('gmaps_context_menu')) {\n doc.body.appendChild(ul);\n }\n\n var context_menu_element = getElementById('gmaps_context_menu');\n\n google.maps.event.addDomListener(context_menu_element, 'mouseout', function (ev) {\n if (!ev.relatedTarget || !this.contains(ev.relatedTarget)) {\n window.setTimeout(function () {\n context_menu_element.style.display = 'none';\n }, 400);\n }\n }, false);\n };\n\n /**\n * Hide the current context menu\n */\n this.hideContextMenu = function () {\n var context_menu_element = getElementById('gmaps_context_menu');\n\n if (context_menu_element) {\n context_menu_element.style.display = 'none';\n }\n };\n\n var setupListener = function (object, name) {\n google.maps.event.addListener(object, name, function (e) {\n if (e == undefined) {\n e = this;\n }\n\n options[name].apply(this, [e]);\n\n self.hideContextMenu();\n });\n };\n\n //google.maps.event.addListener(this.map, 'idle', this.hideContextMenu);\n google.maps.event.addListener(this.map, 'zoom_changed', this.hideContextMenu);\n\n for (var ev = 0; ev < events_that_hide_context_menu.length; ev++) {\n var name = events_that_hide_context_menu[ev];\n\n if (name in options) {\n setupListener(this.map, name);\n }\n }\n\n for (var ev = 0; ev < events_that_doesnt_hide_context_menu.length; ev++) {\n var name = events_that_doesnt_hide_context_menu[ev];\n\n if (name in options) {\n setupListener(this.map, name);\n }\n }\n\n google.maps.event.addListener(this.map, 'rightclick', function (e) {\n if (options.rightclick) {\n options.rightclick.apply(this, [e]);\n }\n\n if (window.context_menu[self.el.id]['map'] != undefined) {\n self.buildContextMenu('map', e);\n }\n });\n\n /**\n * Trigger a `resize` event, useful if you need to repaint the current map (for changes in the viewport or display / hide actions).\n */\n this.refresh = function () {\n google.maps.event.trigger(this.map, 'resize');\n };\n\n /**\n * Adjust the map zoom to include all the markers added in the map.\n */\n this.fitZoom = function () {\n var latLngs = [],\n markers_length = this.markers.length,\n i;\n\n for (i = 0; i < markers_length; i++) {\n if (typeof (this.markers[i].visible) === 'boolean' && this.markers[i].visible) {\n latLngs.push(this.markers[i].getPosition());\n }\n }\n\n this.fitLatLngBounds(latLngs);\n };\n\n /**\n * Adjust the map zoom to include all the coordinates in the `latLngs` array.\n *\n * @param {array} latLngs - Collection of `google.maps.LatLng` objects.\n */\n this.fitLatLngBounds = function (latLngs) {\n var total = latLngs.length,\n bounds = new google.maps.LatLngBounds(),\n i;\n\n for (i = 0; i < total; i++) {\n bounds.extend(latLngs[i]);\n }\n\n this.map.fitBounds(bounds);\n };\n\n /**\n * Center the map using the `lat` and `lng` coordinates.\n *\n * @param {number} lat - Latitude of the coordinate.\n * @param {number} lng - Longitude of the coordinate.\n * @param {function} [callback] - Callback that will be executed after the map is centered.\n */\n this.setCenter = function (lat, lng, callback) {\n this.map.panTo(new google.maps.LatLng(lat, lng));\n\n if (callback) {\n callback();\n }\n };\n\n /**\n * Return the HTML element container of the map.\n *\n * @returns {HTMLElement} the element container.\n */\n this.getElement = function () {\n return this.el;\n };\n\n /**\n * Increase the map's zoom.\n *\n * @param {number} [magnitude] - The number of times the map will be zoomed in.\n */\n this.zoomIn = function (value) {\n value = value || 1;\n\n this.zoom = this.map.getZoom() + value;\n this.map.setZoom(this.zoom);\n };\n\n /**\n * Decrease the map's zoom.\n *\n * @param {number} [magnitude] - The number of times the map will be zoomed out.\n */\n this.zoomOut = function (value) {\n value = value || 1;\n\n this.zoom = this.map.getZoom() - value;\n this.map.setZoom(this.zoom);\n };\n\n var native_methods = [],\n method;\n\n for (method in this.map) {\n if (typeof (this.map[method]) == 'function' && !this[method]) {\n native_methods.push(method);\n }\n }\n\n for (i = 0; i < native_methods.length; i++) {\n (function (gmaps, scope, method_name) {\n gmaps[method_name] = function () {\n return scope[method_name].apply(scope, arguments);\n };\n })(this, this.map, native_methods[i]);\n }\n };\n\n return GMaps;\n })(this);\n\n GMaps.prototype.createControl = function (options) {\n var control = document.createElement('div');\n\n control.style.cursor = 'pointer';\n\n if (options.disableDefaultStyles !== true) {\n control.style.fontFamily = 'Roboto, Arial, sans-serif';\n control.style.fontSize = '11px';\n control.style.boxShadow = 'rgba(0, 0, 0, 0.298039) 0px 1px 4px -1px';\n }\n\n for (var option in options.style) {\n control.style[option] = options.style[option];\n }\n\n if (options.id) {\n control.id = options.id;\n }\n\n if (options.title) {\n control.title = options.title;\n }\n\n if (options.classes) {\n control.className = options.classes;\n }\n\n if (options.content) {\n if (typeof options.content === 'string') {\n control.innerHTML = options.content;\n }\n else if (options.content instanceof HTMLElement) {\n control.appendChild(options.content);\n }\n }\n\n if (options.position) {\n control.position = google.maps.ControlPosition[options.position.toUpperCase()];\n }\n\n for (var ev in options.events) {\n (function (object, name) {\n google.maps.event.addDomListener(object, name, function () {\n options.events[name].apply(this, [this]);\n });\n })(control, ev);\n }\n\n control.index = 1;\n\n return control;\n };\n\n /**\n * Add a custom control to the map UI.\n *\n * @param {object} options - The `options` object should contain:\n * * `style` (object): The keys and values of this object should be valid CSS properties and values.\n * * `id` (string): The HTML id for the custom control.\n * * `classes` (string): A string containing all the HTML classes for the custom control.\n * * `content` (string or HTML element): The content of the custom control.\n * * `position` (string): Any valid [`google.maps.ControlPosition`](https://developers.google.com/maps/documentation/javascript/controls#ControlPositioning) value, in lower or upper case.\n * * `events` (object): The keys of this object should be valid DOM events. The values should be functions.\n * * `disableDefaultStyles` (boolean): If false, removes the default styles for the controls like font (family and size), and box shadow.\n * @returns {HTMLElement}\n */\n GMaps.prototype.addControl = function (options) {\n var control = this.createControl(options);\n\n this.controls.push(control);\n this.map.controls[control.position].push(control);\n\n return control;\n };\n\n /**\n * Remove a control from the map. `control` should be a control returned by `addControl()`.\n *\n * @param {HTMLElement} control - One of the controls returned by `addControl()`.\n * @returns {HTMLElement} the removed control.\n */\n GMaps.prototype.removeControl = function (control) {\n var position = null,\n i;\n\n for (i = 0; i < this.controls.length; i++) {\n if (this.controls[i] == control) {\n position = this.controls[i].position;\n this.controls.splice(i, 1);\n }\n }\n\n if (position) {\n for (i = 0; i < this.map.controls.length; i++) {\n var controlsForPosition = this.map.controls[control.position];\n\n if (controlsForPosition.getAt(i) == control) {\n controlsForPosition.removeAt(i);\n\n break;\n }\n }\n }\n\n return control;\n };\n\n GMaps.prototype.createMarker = function (options) {\n if (options.lat == undefined && options.lng == undefined && options.position == undefined) {\n throw 'No latitude or longitude defined.';\n }\n\n var self = this,\n details = options.details,\n fences = options.fences,\n outside = options.outside,\n base_options = {\n position: new google.maps.LatLng(options.lat, options.lng),\n map: null\n },\n marker_options = extend_object(base_options, options);\n\n delete marker_options.lat;\n delete marker_options.lng;\n delete marker_options.fences;\n delete marker_options.outside;\n\n var marker = new google.maps.Marker(marker_options);\n\n marker.fences = fences;\n\n if (options.infoWindow) {\n marker.infoWindow = new google.maps.InfoWindow(options.infoWindow);\n\n var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed'];\n\n for (var ev = 0; ev < info_window_events.length; ev++) {\n (function (object, name) {\n if (options.infoWindow[name]) {\n google.maps.event.addListener(object, name, function (e) {\n options.infoWindow[name].apply(this, [e]);\n });\n }\n })(marker.infoWindow, info_window_events[ev]);\n }\n }\n\n var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed'];\n\n var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup'];\n\n for (var ev = 0; ev < marker_events.length; ev++) {\n (function (object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function () {\n options[name].apply(this, [this]);\n });\n }\n })(marker, marker_events[ev]);\n }\n\n for (var ev = 0; ev < marker_events_with_mouse.length; ev++) {\n (function (map, object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function (me) {\n if (!me.pixel) {\n me.pixel = map.getProjection().fromLatLngToPoint(me.latLng)\n }\n\n options[name].apply(this, [me]);\n });\n }\n })(this.map, marker, marker_events_with_mouse[ev]);\n }\n\n google.maps.event.addListener(marker, 'click', function () {\n this.details = details;\n\n if (options.click) {\n options.click.apply(this, [this]);\n }\n\n if (marker.infoWindow) {\n self.hideInfoWindows();\n marker.infoWindow.open(self.map, marker);\n }\n });\n\n google.maps.event.addListener(marker, 'rightclick', function (e) {\n e.marker = this;\n\n if (options.rightclick) {\n options.rightclick.apply(this, [e]);\n }\n\n if (window.context_menu[self.el.id]['marker'] != undefined) {\n self.buildContextMenu('marker', e);\n }\n });\n\n if (marker.fences) {\n google.maps.event.addListener(marker, 'dragend', function () {\n self.checkMarkerGeofence(marker, function (m, f) {\n outside(m, f);\n });\n });\n }\n\n return marker;\n };\n\n GMaps.prototype.addMarker = function (options) {\n var marker;\n if (options.hasOwnProperty('gm_accessors_')) {\n // Native google.maps.Marker object\n marker = options;\n }\n else {\n if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) {\n marker = this.createMarker(options);\n }\n else {\n throw 'No latitude or longitude defined.';\n }\n }\n\n marker.setMap(this.map);\n\n if (this.markerClusterer) {\n this.markerClusterer.addMarker(marker);\n }\n\n this.markers.push(marker);\n\n GMaps.fire('marker_added', marker, this);\n\n return marker;\n };\n\n GMaps.prototype.addMarkers = function (array) {\n for (var i = 0, marker; marker = array[i]; i++) {\n this.addMarker(marker);\n }\n\n return this.markers;\n };\n\n GMaps.prototype.hideInfoWindows = function () {\n for (var i = 0, marker; marker = this.markers[i]; i++) {\n if (marker.infoWindow) {\n marker.infoWindow.close();\n }\n }\n };\n\n GMaps.prototype.removeMarker = function (marker) {\n for (var i = 0; i < this.markers.length; i++) {\n if (this.markers[i] === marker) {\n this.markers[i].setMap(null);\n this.markers.splice(i, 1);\n\n if (this.markerClusterer) {\n this.markerClusterer.removeMarker(marker);\n }\n\n GMaps.fire('marker_removed', marker, this);\n\n break;\n }\n }\n\n return marker;\n };\n\n GMaps.prototype.removeMarkers = function (collection) {\n var new_markers = [];\n\n if (typeof collection == 'undefined') {\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n marker.setMap(null);\n\n GMaps.fire('marker_removed', marker, this);\n }\n\n if (this.markerClusterer && this.markerClusterer.clearMarkers) {\n this.markerClusterer.clearMarkers();\n }\n\n this.markers = new_markers;\n }\n else {\n for (var i = 0; i < collection.length; i++) {\n var index = this.markers.indexOf(collection[i]);\n\n if (index > -1) {\n var marker = this.markers[index];\n marker.setMap(null);\n\n if (this.markerClusterer) {\n this.markerClusterer.removeMarker(marker);\n }\n\n GMaps.fire('marker_removed', marker, this);\n }\n }\n\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n if (marker.getMap() != null) {\n new_markers.push(marker);\n }\n }\n\n this.markers = new_markers;\n }\n };\n\n GMaps.prototype.drawOverlay = function (options) {\n var overlay = new google.maps.OverlayView(),\n auto_show = true;\n\n overlay.setMap(this.map);\n\n if (options.auto_show != null) {\n auto_show = options.auto_show;\n }\n\n overlay.onAdd = function () {\n var el = document.createElement('div');\n\n el.style.borderStyle = \"none\";\n el.style.borderWidth = \"0px\";\n el.style.position = \"absolute\";\n el.style.zIndex = 100;\n el.innerHTML = options.content;\n\n overlay.el = el;\n\n if (!options.layer) {\n options.layer = 'overlayLayer';\n }\n\n var panes = this.getPanes(),\n overlayLayer = panes[options.layer],\n stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown'];\n\n overlayLayer.appendChild(el);\n\n for (var ev = 0; ev < stop_overlay_events.length; ev++) {\n (function (object, name) {\n google.maps.event.addDomListener(object, name, function (e) {\n if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) {\n e.cancelBubble = true;\n e.returnValue = false;\n }\n else {\n e.stopPropagation();\n }\n });\n })(el, stop_overlay_events[ev]);\n }\n\n if (options.click) {\n panes.overlayMouseTarget.appendChild(overlay.el);\n google.maps.event.addDomListener(overlay.el, 'click', function () {\n options.click.apply(overlay, [overlay]);\n });\n }\n\n google.maps.event.trigger(this, 'ready');\n };\n\n overlay.draw = function () {\n var projection = this.getProjection(),\n pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng));\n\n options.horizontalOffset = options.horizontalOffset || 0;\n options.verticalOffset = options.verticalOffset || 0;\n\n var el = overlay.el,\n content = el.children[0],\n content_height = content.clientHeight,\n content_width = content.clientWidth;\n\n switch (options.verticalAlign) {\n case 'top':\n el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px';\n break;\n default:\n case 'middle':\n el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px';\n break;\n case 'bottom':\n el.style.top = (pixel.y + options.verticalOffset) + 'px';\n break;\n }\n\n switch (options.horizontalAlign) {\n case 'left':\n el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px';\n break;\n default:\n case 'center':\n el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px';\n break;\n case 'right':\n el.style.left = (pixel.x + options.horizontalOffset) + 'px';\n break;\n }\n\n el.style.display = auto_show ? 'block' : 'none';\n\n if (!auto_show) {\n options.show.apply(this, [el]);\n }\n };\n\n overlay.onRemove = function () {\n var el = overlay.el;\n\n if (options.remove) {\n options.remove.apply(this, [el]);\n }\n else {\n overlay.el.parentNode.removeChild(overlay.el);\n overlay.el = null;\n }\n };\n\n this.overlays.push(overlay);\n return overlay;\n };\n\n GMaps.prototype.removeOverlay = function (overlay) {\n for (var i = 0; i < this.overlays.length; i++) {\n if (this.overlays[i] === overlay) {\n this.overlays[i].setMap(null);\n this.overlays.splice(i, 1);\n\n break;\n }\n }\n };\n\n GMaps.prototype.removeOverlays = function () {\n for (var i = 0, item; item = this.overlays[i]; i++) {\n item.setMap(null);\n }\n\n this.overlays = [];\n };\n\n GMaps.prototype.drawPolyline = function (options) {\n var path = [],\n points = options.path;\n\n if (points.length) {\n if (points[0][0] === undefined) {\n path = points;\n }\n else {\n for (var i = 0, latlng; latlng = points[i]; i++) {\n path.push(new google.maps.LatLng(latlng[0], latlng[1]));\n }\n }\n }\n\n var polyline_options = {\n map: this.map,\n path: path,\n strokeColor: options.strokeColor,\n strokeOpacity: options.strokeOpacity,\n strokeWeight: options.strokeWeight,\n geodesic: options.geodesic,\n clickable: true,\n editable: false,\n visible: true\n };\n\n if (options.hasOwnProperty(\"clickable\")) {\n polyline_options.clickable = options.clickable;\n }\n\n if (options.hasOwnProperty(\"editable\")) {\n polyline_options.editable = options.editable;\n }\n\n if (options.hasOwnProperty(\"icons\")) {\n polyline_options.icons = options.icons;\n }\n\n if (options.hasOwnProperty(\"zIndex\")) {\n polyline_options.zIndex = options.zIndex;\n }\n\n var polyline = new google.maps.Polyline(polyline_options);\n\n var polyline_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n for (var ev = 0; ev < polyline_events.length; ev++) {\n (function (object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function (e) {\n options[name].apply(this, [e]);\n });\n }\n })(polyline, polyline_events[ev]);\n }\n\n this.polylines.push(polyline);\n\n GMaps.fire('polyline_added', polyline, this);\n\n return polyline;\n };\n\n GMaps.prototype.removePolyline = function (polyline) {\n for (var i = 0; i < this.polylines.length; i++) {\n if (this.polylines[i] === polyline) {\n this.polylines[i].setMap(null);\n this.polylines.splice(i, 1);\n\n GMaps.fire('polyline_removed', polyline, this);\n\n break;\n }\n }\n };\n\n GMaps.prototype.removePolylines = function () {\n for (var i = 0, item; item = this.polylines[i]; i++) {\n item.setMap(null);\n }\n\n this.polylines = [];\n };\n\n GMaps.prototype.drawCircle = function (options) {\n options = extend_object({\n map: this.map,\n center: new google.maps.LatLng(options.lat, options.lng)\n }, options);\n\n delete options.lat;\n delete options.lng;\n\n var polygon = new google.maps.Circle(options),\n polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n for (var ev = 0; ev < polygon_events.length; ev++) {\n (function (object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function (e) {\n options[name].apply(this, [e]);\n });\n }\n })(polygon, polygon_events[ev]);\n }\n\n this.polygons.push(polygon);\n\n return polygon;\n };\n\n GMaps.prototype.drawRectangle = function (options) {\n options = extend_object({\n map: this.map\n }, options);\n\n var latLngBounds = new google.maps.LatLngBounds(\n new google.maps.LatLng(options.bounds[0][0], options.bounds[0][1]),\n new google.maps.LatLng(options.bounds[1][0], options.bounds[1][1])\n );\n\n options.bounds = latLngBounds;\n\n var polygon = new google.maps.Rectangle(options),\n polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n for (var ev = 0; ev < polygon_events.length; ev++) {\n (function (object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function (e) {\n options[name].apply(this, [e]);\n });\n }\n })(polygon, polygon_events[ev]);\n }\n\n this.polygons.push(polygon);\n\n return polygon;\n };\n\n GMaps.prototype.drawPolygon = function (options) {\n var useGeoJSON = false;\n\n if (options.hasOwnProperty(\"useGeoJSON\")) {\n useGeoJSON = options.useGeoJSON;\n }\n\n delete options.useGeoJSON;\n\n options = extend_object({\n map: this.map\n }, options);\n\n if (useGeoJSON == false) {\n options.paths = [options.paths.slice(0)];\n }\n\n if (options.paths.length > 0) {\n if (options.paths[0].length > 0) {\n options.paths = array_flat(array_map(options.paths, arrayToLatLng, useGeoJSON));\n }\n }\n\n var polygon = new google.maps.Polygon(options),\n polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n for (var ev = 0; ev < polygon_events.length; ev++) {\n (function (object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function (e) {\n options[name].apply(this, [e]);\n });\n }\n })(polygon, polygon_events[ev]);\n }\n\n this.polygons.push(polygon);\n\n GMaps.fire('polygon_added', polygon, this);\n\n return polygon;\n };\n\n GMaps.prototype.removePolygon = function (polygon) {\n for (var i = 0; i < this.polygons.length; i++) {\n if (this.polygons[i] === polygon) {\n this.polygons[i].setMap(null);\n this.polygons.splice(i, 1);\n\n GMaps.fire('polygon_removed', polygon, this);\n\n break;\n }\n }\n };\n\n GMaps.prototype.removePolygons = function () {\n for (var i = 0, item; item = this.polygons[i]; i++) {\n item.setMap(null);\n }\n\n this.polygons = [];\n };\n\n GMaps.prototype.getFromFusionTables = function (options) {\n var events = options.events;\n\n delete options.events;\n\n var fusion_tables_options = options,\n layer = new google.maps.FusionTablesLayer(fusion_tables_options);\n\n for (var ev in events) {\n (function (object, name) {\n google.maps.event.addListener(object, name, function (e) {\n events[name].apply(this, [e]);\n });\n })(layer, ev);\n }\n\n this.layers.push(layer);\n\n return layer;\n };\n\n GMaps.prototype.loadFromFusionTables = function (options) {\n var layer = this.getFromFusionTables(options);\n layer.setMap(this.map);\n\n return layer;\n };\n\n GMaps.prototype.getFromKML = function (options) {\n var url = options.url,\n events = options.events;\n\n delete options.url;\n delete options.events;\n\n var kml_options = options,\n layer = new google.maps.KmlLayer(url, kml_options);\n\n for (var ev in events) {\n (function (object, name) {\n google.maps.event.addListener(object, name, function (e) {\n events[name].apply(this, [e]);\n });\n })(layer, ev);\n }\n\n this.layers.push(layer);\n\n return layer;\n };\n\n GMaps.prototype.loadFromKML = function (options) {\n var layer = this.getFromKML(options);\n layer.setMap(this.map);\n\n return layer;\n };\n\n GMaps.prototype.addLayer = function (layerName, options) {\n //var default_layers = ['weather', 'clouds', 'traffic', 'transit', 'bicycling', 'panoramio', 'places'];\n options = options || {};\n var layer;\n\n switch (layerName) {\n case 'weather': this.singleLayers.weather = layer = new google.maps.weather.WeatherLayer();\n break;\n case 'clouds': this.singleLayers.clouds = layer = new google.maps.weather.CloudLayer();\n break;\n case 'traffic': this.singleLayers.traffic = layer = new google.maps.TrafficLayer();\n break;\n case 'transit': this.singleLayers.transit = layer = new google.maps.TransitLayer();\n break;\n case 'bicycling': this.singleLayers.bicycling = layer = new google.maps.BicyclingLayer();\n break;\n case 'panoramio':\n this.singleLayers.panoramio = layer = new google.maps.panoramio.PanoramioLayer();\n layer.setTag(options.filter);\n delete options.filter;\n\n //click event\n if (options.click) {\n google.maps.event.addListener(layer, 'click', function (event) {\n options.click(event);\n delete options.click;\n });\n }\n break;\n case 'places':\n this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map);\n\n //search, nearbySearch, radarSearch callback, Both are the same\n if (options.search || options.nearbySearch || options.radarSearch) {\n var placeSearchRequest = {\n bounds: options.bounds || null,\n keyword: options.keyword || null,\n location: options.location || null,\n name: options.name || null,\n radius: options.radius || null,\n rankBy: options.rankBy || null,\n types: options.types || null\n };\n\n if (options.radarSearch) {\n layer.radarSearch(placeSearchRequest, options.radarSearch);\n }\n\n if (options.search) {\n layer.search(placeSearchRequest, options.search);\n }\n\n if (options.nearbySearch) {\n layer.nearbySearch(placeSearchRequest, options.nearbySearch);\n }\n }\n\n //textSearch callback\n if (options.textSearch) {\n var textSearchRequest = {\n bounds: options.bounds || null,\n location: options.location || null,\n query: options.query || null,\n radius: options.radius || null\n };\n\n layer.textSearch(textSearchRequest, options.textSearch);\n }\n break;\n }\n\n if (layer !== undefined) {\n if (typeof layer.setOptions == 'function') {\n layer.setOptions(options);\n }\n if (typeof layer.setMap == 'function') {\n layer.setMap(this.map);\n }\n\n return layer;\n }\n };\n\n GMaps.prototype.removeLayer = function (layer) {\n if (typeof (layer) == \"string\" && this.singleLayers[layer] !== undefined) {\n this.singleLayers[layer].setMap(null);\n\n delete this.singleLayers[layer];\n }\n else {\n for (var i = 0; i < this.layers.length; i++) {\n if (this.layers[i] === layer) {\n this.layers[i].setMap(null);\n this.layers.splice(i, 1);\n\n break;\n }\n }\n }\n };\n\n var travelMode, unitSystem;\n\n GMaps.prototype.getRoutes = function (options) {\n switch (options.travelMode) {\n case 'bicycling':\n travelMode = google.maps.TravelMode.BICYCLING;\n break;\n case 'transit':\n travelMode = google.maps.TravelMode.TRANSIT;\n break;\n case 'driving':\n travelMode = google.maps.TravelMode.DRIVING;\n break;\n default:\n travelMode = google.maps.TravelMode.WALKING;\n break;\n }\n\n if (options.unitSystem === 'imperial') {\n unitSystem = google.maps.UnitSystem.IMPERIAL;\n }\n else {\n unitSystem = google.maps.UnitSystem.METRIC;\n }\n\n var base_options = {\n avoidHighways: false,\n avoidTolls: false,\n optimizeWaypoints: false,\n waypoints: []\n },\n request_options = extend_object(base_options, options);\n\n request_options.origin = /string/.test(typeof options.origin) ? options.origin : new google.maps.LatLng(options.origin[0], options.origin[1]);\n request_options.destination = /string/.test(typeof options.destination) ? options.destination : new google.maps.LatLng(options.destination[0], options.destination[1]);\n request_options.travelMode = travelMode;\n request_options.unitSystem = unitSystem;\n\n delete request_options.callback;\n delete request_options.error;\n\n var self = this,\n routes = [],\n service = new google.maps.DirectionsService();\n\n service.route(request_options, function (result, status) {\n if (status === google.maps.DirectionsStatus.OK) {\n for (var r in result.routes) {\n if (result.routes.hasOwnProperty(r)) {\n routes.push(result.routes[r]);\n }\n }\n\n if (options.callback) {\n options.callback(routes, result, status);\n }\n }\n else {\n if (options.error) {\n options.error(result, status);\n }\n }\n });\n };\n\n GMaps.prototype.removeRoutes = function () {\n this.routes.length = 0;\n };\n\n GMaps.prototype.getElevations = function (options) {\n options = extend_object({\n locations: [],\n path: false,\n samples: 256\n }, options);\n\n if (options.locations.length > 0) {\n if (options.locations[0].length > 0) {\n options.locations = array_flat(array_map([options.locations], arrayToLatLng, false));\n }\n }\n\n var callback = options.callback;\n delete options.callback;\n\n var service = new google.maps.ElevationService();\n\n //location request\n if (!options.path) {\n delete options.path;\n delete options.samples;\n\n service.getElevationForLocations(options, function (result, status) {\n if (callback && typeof (callback) === \"function\") {\n callback(result, status);\n }\n });\n //path request\n } else {\n var pathRequest = {\n path: options.locations,\n samples: options.samples\n };\n\n service.getElevationAlongPath(pathRequest, function (result, status) {\n if (callback && typeof (callback) === \"function\") {\n callback(result, status);\n }\n });\n }\n };\n\n GMaps.prototype.cleanRoute = GMaps.prototype.removePolylines;\n\n GMaps.prototype.renderRoute = function (options, renderOptions) {\n var self = this,\n panel = ((typeof renderOptions.panel === 'string') ? document.getElementById(renderOptions.panel.replace('#', '')) : renderOptions.panel),\n display;\n\n renderOptions.panel = panel;\n renderOptions = extend_object({\n map: this.map\n }, renderOptions);\n display = new google.maps.DirectionsRenderer(renderOptions);\n\n this.getRoutes({\n origin: options.origin,\n destination: options.destination,\n travelMode: options.travelMode,\n waypoints: options.waypoints,\n unitSystem: options.unitSystem,\n error: options.error,\n avoidHighways: options.avoidHighways,\n avoidTolls: options.avoidTolls,\n optimizeWaypoints: options.optimizeWaypoints,\n callback: function (routes, response, status) {\n if (status === google.maps.DirectionsStatus.OK) {\n display.setDirections(response);\n }\n }\n });\n };\n\n GMaps.prototype.drawRoute = function (options) {\n var self = this;\n\n this.getRoutes({\n origin: options.origin,\n destination: options.destination,\n travelMode: options.travelMode,\n waypoints: options.waypoints,\n unitSystem: options.unitSystem,\n error: options.error,\n avoidHighways: options.avoidHighways,\n avoidTolls: options.avoidTolls,\n optimizeWaypoints: options.optimizeWaypoints,\n callback: function (routes) {\n if (routes.length > 0) {\n var polyline_options = {\n path: routes[routes.length - 1].overview_path,\n strokeColor: options.strokeColor,\n strokeOpacity: options.strokeOpacity,\n strokeWeight: options.strokeWeight\n };\n\n if (options.hasOwnProperty(\"icons\")) {\n polyline_options.icons = options.icons;\n }\n\n self.drawPolyline(polyline_options);\n\n if (options.callback) {\n options.callback(routes[routes.length - 1]);\n }\n }\n }\n });\n };\n\n GMaps.prototype.travelRoute = function (options) {\n if (options.origin && options.destination) {\n this.getRoutes({\n origin: options.origin,\n destination: options.destination,\n travelMode: options.travelMode,\n waypoints: options.waypoints,\n unitSystem: options.unitSystem,\n error: options.error,\n callback: function (e) {\n //start callback\n if (e.length > 0 && options.start) {\n options.start(e[e.length - 1]);\n }\n\n //step callback\n if (e.length > 0 && options.step) {\n var route = e[e.length - 1];\n if (route.legs.length > 0) {\n var steps = route.legs[0].steps;\n for (var i = 0, step; step = steps[i]; i++) {\n step.step_number = i;\n options.step(step, (route.legs[0].steps.length - 1));\n }\n }\n }\n\n //end callback\n if (e.length > 0 && options.end) {\n options.end(e[e.length - 1]);\n }\n }\n });\n }\n else if (options.route) {\n if (options.route.legs.length > 0) {\n var steps = options.route.legs[0].steps;\n for (var i = 0, step; step = steps[i]; i++) {\n step.step_number = i;\n options.step(step);\n }\n }\n }\n };\n\n GMaps.prototype.drawSteppedRoute = function (options) {\n var self = this;\n\n if (options.origin && options.destination) {\n this.getRoutes({\n origin: options.origin,\n destination: options.destination,\n travelMode: options.travelMode,\n waypoints: options.waypoints,\n error: options.error,\n callback: function (e) {\n //start callback\n if (e.length > 0 && options.start) {\n options.start(e[e.length - 1]);\n }\n\n //step callback\n if (e.length > 0 && options.step) {\n var route = e[e.length - 1];\n if (route.legs.length > 0) {\n var steps = route.legs[0].steps;\n for (var i = 0, step; step = steps[i]; i++) {\n step.step_number = i;\n var polyline_options = {\n path: step.path,\n strokeColor: options.strokeColor,\n strokeOpacity: options.strokeOpacity,\n strokeWeight: options.strokeWeight\n };\n\n if (options.hasOwnProperty(\"icons\")) {\n polyline_options.icons = options.icons;\n }\n\n self.drawPolyline(polyline_options);\n options.step(step, (route.legs[0].steps.length - 1));\n }\n }\n }\n\n //end callback\n if (e.length > 0 && options.end) {\n options.end(e[e.length - 1]);\n }\n }\n });\n }\n else if (options.route) {\n if (options.route.legs.length > 0) {\n var steps = options.route.legs[0].steps;\n for (var i = 0, step; step = steps[i]; i++) {\n step.step_number = i;\n var polyline_options = {\n path: step.path,\n strokeColor: options.strokeColor,\n strokeOpacity: options.strokeOpacity,\n strokeWeight: options.strokeWeight\n };\n\n if (options.hasOwnProperty(\"icons\")) {\n polyline_options.icons = options.icons;\n }\n\n self.drawPolyline(polyline_options);\n options.step(step);\n }\n }\n }\n };\n\n GMaps.Route = function (options) {\n this.origin = options.origin;\n this.destination = options.destination;\n this.waypoints = options.waypoints;\n\n this.map = options.map;\n this.route = options.route;\n this.step_count = 0;\n this.steps = this.route.legs[0].steps;\n this.steps_length = this.steps.length;\n\n var polyline_options = {\n path: new google.maps.MVCArray(),\n strokeColor: options.strokeColor,\n strokeOpacity: options.strokeOpacity,\n strokeWeight: options.strokeWeight\n };\n\n if (options.hasOwnProperty(\"icons\")) {\n polyline_options.icons = options.icons;\n }\n\n this.polyline = this.map.drawPolyline(polyline_options).getPath();\n };\n\n GMaps.Route.prototype.getRoute = function (options) {\n var self = this;\n\n this.map.getRoutes({\n origin: this.origin,\n destination: this.destination,\n travelMode: options.travelMode,\n waypoints: this.waypoints || [],\n error: options.error,\n callback: function () {\n self.route = e[0];\n\n if (options.callback) {\n options.callback.call(self);\n }\n }\n });\n };\n\n GMaps.Route.prototype.back = function () {\n if (this.step_count > 0) {\n this.step_count--;\n var path = this.route.legs[0].steps[this.step_count].path;\n\n for (var p in path) {\n if (path.hasOwnProperty(p)) {\n this.polyline.pop();\n }\n }\n }\n };\n\n GMaps.Route.prototype.forward = function () {\n if (this.step_count < this.steps_length) {\n var path = this.route.legs[0].steps[this.step_count].path;\n\n for (var p in path) {\n if (path.hasOwnProperty(p)) {\n this.polyline.push(path[p]);\n }\n }\n this.step_count++;\n }\n };\n\n GMaps.prototype.checkGeofence = function (lat, lng, fence) {\n return fence.containsLatLng(new google.maps.LatLng(lat, lng));\n };\n\n GMaps.prototype.checkMarkerGeofence = function (marker, outside_callback) {\n if (marker.fences) {\n for (var i = 0, fence; fence = marker.fences[i]; i++) {\n var pos = marker.getPosition();\n if (!this.checkGeofence(pos.lat(), pos.lng(), fence)) {\n outside_callback(marker, fence);\n }\n }\n }\n };\n\n GMaps.prototype.toImage = function (options) {\n var options = options || {},\n static_map_options = {};\n\n static_map_options['size'] = options['size'] || [this.el.clientWidth, this.el.clientHeight];\n static_map_options['lat'] = this.getCenter().lat();\n static_map_options['lng'] = this.getCenter().lng();\n\n if (this.markers.length > 0) {\n static_map_options['markers'] = [];\n\n for (var i = 0; i < this.markers.length; i++) {\n static_map_options['markers'].push({\n lat: this.markers[i].getPosition().lat(),\n lng: this.markers[i].getPosition().lng()\n });\n }\n }\n\n if (this.polylines.length > 0) {\n var polyline = this.polylines[0];\n\n static_map_options['polyline'] = {};\n static_map_options['polyline']['path'] = google.maps.geometry.encoding.encodePath(polyline.getPath());\n static_map_options['polyline']['strokeColor'] = polyline.strokeColor\n static_map_options['polyline']['strokeOpacity'] = polyline.strokeOpacity\n static_map_options['polyline']['strokeWeight'] = polyline.strokeWeight\n }\n\n return GMaps.staticMapURL(static_map_options);\n };\n\n GMaps.staticMapURL = function (options) {\n var parameters = [],\n data,\n static_root = (location.protocol === 'file:' ? 'http:' : location.protocol) + '//maps.googleapis.com/maps/api/staticmap';\n\n if (options.url) {\n static_root = options.url;\n delete options.url;\n }\n\n static_root += '?';\n\n var markers = options.markers;\n\n delete options.markers;\n\n if (!markers && options.marker) {\n markers = [options.marker];\n delete options.marker;\n }\n\n var styles = options.styles;\n\n delete options.styles;\n\n var polyline = options.polyline;\n delete options.polyline;\n\n /** Map options **/\n if (options.center) {\n parameters.push('center=' + options.center);\n delete options.center;\n }\n else if (options.address) {\n parameters.push('center=' + options.address);\n delete options.address;\n }\n else if (options.lat) {\n parameters.push(['center=', options.lat, ',', options.lng].join(''));\n delete options.lat;\n delete options.lng;\n }\n else if (options.visible) {\n var visible = encodeURI(options.visible.join('|'));\n parameters.push('visible=' + visible);\n }\n\n var size = options.size;\n if (size) {\n if (size.join) {\n size = size.join('x');\n }\n delete options.size;\n }\n else {\n size = '630x300';\n }\n parameters.push('size=' + size);\n\n if (!options.zoom && options.zoom !== false) {\n options.zoom = 15;\n }\n\n var sensor = options.hasOwnProperty('sensor') ? !!options.sensor : true;\n delete options.sensor;\n parameters.push('sensor=' + sensor);\n\n for (var param in options) {\n if (options.hasOwnProperty(param)) {\n parameters.push(param + '=' + options[param]);\n }\n }\n\n /** Markers **/\n if (markers) {\n var marker, loc;\n\n for (var i = 0; data = markers[i]; i++) {\n marker = [];\n\n if (data.size && data.size !== 'normal') {\n marker.push('size:' + data.size);\n delete data.size;\n }\n else if (data.icon) {\n marker.push('icon:' + encodeURI(data.icon));\n delete data.icon;\n }\n\n if (data.color) {\n marker.push('color:' + data.color.replace('#', '0x'));\n delete data.color;\n }\n\n if (data.label) {\n marker.push('label:' + data.label[0].toUpperCase());\n delete data.label;\n }\n\n loc = (data.address ? data.address : data.lat + ',' + data.lng);\n delete data.address;\n delete data.lat;\n delete data.lng;\n\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n marker.push(param + ':' + data[param]);\n }\n }\n\n if (marker.length || i === 0) {\n marker.push(loc);\n marker = marker.join('|');\n parameters.push('markers=' + encodeURI(marker));\n }\n // New marker without styles\n else {\n marker = parameters.pop() + encodeURI('|' + loc);\n parameters.push(marker);\n }\n }\n }\n\n /** Map Styles **/\n if (styles) {\n for (var i = 0; i < styles.length; i++) {\n var styleRule = [];\n if (styles[i].featureType) {\n styleRule.push('feature:' + styles[i].featureType.toLowerCase());\n }\n\n if (styles[i].elementType) {\n styleRule.push('element:' + styles[i].elementType.toLowerCase());\n }\n\n for (var j = 0; j < styles[i].stylers.length; j++) {\n for (var p in styles[i].stylers[j]) {\n var ruleArg = styles[i].stylers[j][p];\n if (p == 'hue' || p == 'color') {\n ruleArg = '0x' + ruleArg.substring(1);\n }\n styleRule.push(p + ':' + ruleArg);\n }\n }\n\n var rule = styleRule.join('|');\n if (rule != '') {\n parameters.push('style=' + rule);\n }\n }\n }\n\n /** Polylines **/\n function parseColor(color, opacity) {\n if (color[0] === '#') {\n color = color.replace('#', '0x');\n\n if (opacity) {\n opacity = parseFloat(opacity);\n opacity = Math.min(1, Math.max(opacity, 0));\n if (opacity === 0) {\n return '0x00000000';\n }\n opacity = (opacity * 255).toString(16);\n if (opacity.length === 1) {\n opacity += opacity;\n }\n\n color = color.slice(0, 8) + opacity;\n }\n }\n return color;\n }\n\n if (polyline) {\n data = polyline;\n polyline = [];\n\n if (data.strokeWeight) {\n polyline.push('weight:' + parseInt(data.strokeWeight, 10));\n }\n\n if (data.strokeColor) {\n var color = parseColor(data.strokeColor, data.strokeOpacity);\n polyline.push('color:' + color);\n }\n\n if (data.fillColor) {\n var fillcolor = parseColor(data.fillColor, data.fillOpacity);\n polyline.push('fillcolor:' + fillcolor);\n }\n\n var path = data.path;\n if (path.join) {\n for (var j = 0, pos; pos = path[j]; j++) {\n polyline.push(pos.join(','));\n }\n }\n else {\n polyline.push('enc:' + path);\n }\n\n polyline = polyline.join('|');\n parameters.push('path=' + encodeURI(polyline));\n }\n\n /** Retina support **/\n var dpi = window.devicePixelRatio || 1;\n parameters.push('scale=' + dpi);\n\n parameters = parameters.join('&');\n return static_root + parameters;\n };\n\n GMaps.prototype.addMapType = function (mapTypeId, options) {\n if (options.hasOwnProperty(\"getTileUrl\") && typeof (options[\"getTileUrl\"]) == \"function\") {\n options.tileSize = options.tileSize || new google.maps.Size(256, 256);\n\n var mapType = new google.maps.ImageMapType(options);\n\n this.map.mapTypes.set(mapTypeId, mapType);\n }\n else {\n throw \"'getTileUrl' function required.\";\n }\n };\n\n GMaps.prototype.addOverlayMapType = function (options) {\n if (options.hasOwnProperty(\"getTile\") && typeof (options[\"getTile\"]) == \"function\") {\n var overlayMapTypeIndex = options.index;\n\n delete options.index;\n\n this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options);\n }\n else {\n throw \"'getTile' function required.\";\n }\n };\n\n GMaps.prototype.removeOverlayMapType = function (overlayMapTypeIndex) {\n this.map.overlayMapTypes.removeAt(overlayMapTypeIndex);\n };\n\n GMaps.prototype.addStyle = function (options) {\n var styledMapType = new google.maps.StyledMapType(options.styles, { name: options.styledMapName });\n\n this.map.mapTypes.set(options.mapTypeId, styledMapType);\n };\n\n GMaps.prototype.setStyle = function (mapTypeId) {\n this.map.setMapTypeId(mapTypeId);\n };\n\n GMaps.prototype.createPanorama = function (streetview_options) {\n if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) {\n streetview_options.lat = this.getCenter().lat();\n streetview_options.lng = this.getCenter().lng();\n }\n\n this.panorama = GMaps.createPanorama(streetview_options);\n\n this.map.setStreetView(this.panorama);\n\n return this.panorama;\n };\n\n GMaps.createPanorama = function (options) {\n var el = getElementById(options.el, options.context);\n\n options.position = new google.maps.LatLng(options.lat, options.lng);\n\n delete options.el;\n delete options.context;\n delete options.lat;\n delete options.lng;\n\n var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed'],\n streetview_options = extend_object({ visible: true }, options);\n\n for (var i = 0; i < streetview_events.length; i++) {\n delete streetview_options[streetview_events[i]];\n }\n\n var panorama = new google.maps.StreetViewPanorama(el, streetview_options);\n\n for (var i = 0; i < streetview_events.length; i++) {\n (function (object, name) {\n if (options[name]) {\n google.maps.event.addListener(object, name, function () {\n options[name].apply(this);\n });\n }\n })(panorama, streetview_events[i]);\n }\n\n return panorama;\n };\n\n GMaps.prototype.on = function (event_name, handler) {\n return GMaps.on(event_name, this, handler);\n };\n\n GMaps.prototype.off = function (event_name) {\n GMaps.off(event_name, this);\n };\n\n GMaps.prototype.once = function (event_name, handler) {\n return GMaps.once(event_name, this, handler);\n };\n\n GMaps.custom_events = ['marker_added', 'marker_removed', 'polyline_added', 'polyline_removed', 'polygon_added', 'polygon_removed', 'geolocated', 'geolocation_failed'];\n\n GMaps.on = function (event_name, object, handler) {\n if (GMaps.custom_events.indexOf(event_name) == -1) {\n if (object instanceof GMaps) object = object.map;\n return google.maps.event.addListener(object, event_name, handler);\n }\n else {\n var registered_event = {\n handler: handler,\n eventName: event_name\n };\n\n object.registered_events[event_name] = object.registered_events[event_name] || [];\n object.registered_events[event_name].push(registered_event);\n\n return registered_event;\n }\n };\n\n GMaps.off = function (event_name, object) {\n if (GMaps.custom_events.indexOf(event_name) == -1) {\n if (object instanceof GMaps) object = object.map;\n google.maps.event.clearListeners(object, event_name);\n }\n else {\n object.registered_events[event_name] = [];\n }\n };\n\n GMaps.once = function (event_name, object, handler) {\n if (GMaps.custom_events.indexOf(event_name) == -1) {\n if (object instanceof GMaps) object = object.map;\n return google.maps.event.addListenerOnce(object, event_name, handler);\n }\n };\n\n GMaps.fire = function (event_name, object, scope) {\n if (GMaps.custom_events.indexOf(event_name) == -1) {\n google.maps.event.trigger(object, event_name, Array.prototype.slice.apply(arguments).slice(2));\n }\n else {\n if (event_name in scope.registered_events) {\n var firing_events = scope.registered_events[event_name];\n\n for (var i = 0; i < firing_events.length; i++) {\n (function (handler, scope, object) {\n handler.apply(scope, [object]);\n })(firing_events[i]['handler'], scope, object);\n }\n }\n }\n };\n\n GMaps.geolocate = function (options) {\n var complete_callback = options.always || options.complete;\n\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(function (position) {\n options.success(position);\n\n if (complete_callback) {\n complete_callback();\n }\n }, function (error) {\n options.error(error);\n\n if (complete_callback) {\n complete_callback();\n }\n }, options.options);\n }\n else {\n options.not_supported();\n\n if (complete_callback) {\n complete_callback();\n }\n }\n };\n\n GMaps.geocode = function (options) {\n this.geocoder = new google.maps.Geocoder();\n var callback = options.callback;\n if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) {\n options.latLng = new google.maps.LatLng(options.lat, options.lng);\n }\n\n delete options.lat;\n delete options.lng;\n delete options.callback;\n\n this.geocoder.geocode(options, function (results, status) {\n callback(results, status);\n });\n };\n\n if (typeof window.google === 'object' && window.google.maps) {\n //==========================\n // Polygon containsLatLng\n // https://github.com/tparkin/Google-Maps-Point-in-Polygon\n // Poygon getBounds extension - google-maps-extensions\n // http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js\n if (!google.maps.Polygon.prototype.getBounds) {\n google.maps.Polygon.prototype.getBounds = function (latLng) {\n var bounds = new google.maps.LatLngBounds();\n var paths = this.getPaths();\n var path;\n\n for (var p = 0; p < paths.getLength() ; p++) {\n path = paths.getAt(p);\n for (var i = 0; i < path.getLength() ; i++) {\n bounds.extend(path.getAt(i));\n }\n }\n\n return bounds;\n };\n }\n\n if (!google.maps.Polygon.prototype.containsLatLng) {\n // Polygon containsLatLng - method to determine if a latLng is within a polygon\n google.maps.Polygon.prototype.containsLatLng = function (latLng) {\n // Exclude points outside of bounds as there is no way they are in the poly\n var bounds = this.getBounds();\n\n if (bounds !== null && !bounds.contains(latLng)) {\n return false;\n }\n\n // Raycast point in polygon method\n var inPoly = false;\n\n var numPaths = this.getPaths().getLength();\n for (var p = 0; p < numPaths; p++) {\n var path = this.getPaths().getAt(p);\n var numPoints = path.getLength();\n var j = numPoints - 1;\n\n for (var i = 0; i < numPoints; i++) {\n var vertex1 = path.getAt(i);\n var vertex2 = path.getAt(j);\n\n if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) {\n if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {\n inPoly = !inPoly;\n }\n }\n\n j = i;\n }\n }\n\n return inPoly;\n };\n }\n\n if (!google.maps.Circle.prototype.containsLatLng) {\n google.maps.Circle.prototype.containsLatLng = function (latLng) {\n if (google.maps.geometry) {\n return google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius();\n }\n else {\n return true;\n }\n };\n }\n\n google.maps.Rectangle.prototype.containsLatLng = function (latLng) {\n return this.getBounds().contains(latLng);\n };\n\n google.maps.LatLngBounds.prototype.containsLatLng = function (latLng) {\n return this.contains(latLng);\n };\n\n google.maps.Marker.prototype.setFences = function (fences) {\n this.fences = fences;\n };\n\n google.maps.Marker.prototype.addFence = function (fence) {\n this.fences.push(fence);\n };\n\n google.maps.Marker.prototype.getId = function () {\n return this['__gm_id'];\n };\n }\n\n //==========================\n // Array indexOf\n // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf\n if (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */) {\n \"use strict\";\n if (this == null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n != 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n }\n }\n\n return GMaps;\n}));\n","/**\n * @name MarkerClustererPlus for Google Maps V3\n * @version 2.1.11\n * @author Gary Little\n * @fileoverview\n * The library creates and manages per-zoom-level clusters for large amounts of markers.\n *

    \n * This is an enhanced V3 implementation of the V2 MarkerClusterer by Xiaoxi Wu. It is\n * based on the V3 MarkerClusterer port by Luke Mahe. MarkerClustererPlus was created\n * by Gary Little.\n *

    \n * v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It\n * adds support for the ignoreHidden, title, batchSizeIE,\n * and calculator properties as well as support for four more events. It also allows\n * greater control over the styling of the text that appears on the cluster marker. The\n * documentation has been significantly improved and the overall code has been simplified and\n * polished. Very large numbers of markers can now be managed without causing Javascript timeout\n * errors on Internet Explorer. Note that the name of the clusterclick event has been\n * deprecated. The new name is click, so please change your application code now.\n */\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @name ClusterIconStyle\n * @class This class represents the object for values in the styles array passed\n * to the {@link MarkerClusterer} constructor. The element in this array that is used to\n * style the cluster icon is determined by calling the calculator function.\n *\n * @property {string} url The URL of the cluster icon image file. Required.\n * @property {number} height The display height (in pixels) of the cluster icon. Required.\n * @property {number} width The display width (in pixels) of the cluster icon. Required.\n * @property {Array} [anchorText] The position (in pixels) from the center of the cluster icon to\n * where the text label is to be centered and drawn. The format is [yoffset, xoffset]\n * where yoffset increases as you go down from center and xoffset\n * increases to the right of center. The default is [0, 0].\n * @property {Array} [anchorIcon] The anchor position (in pixels) of the cluster icon. This is the\n * spot on the cluster icon that is to be aligned with the cluster position. The format is\n * [yoffset, xoffset] where yoffset increases as you go down and\n * xoffset increases to the right of the top-left corner of the icon. The default\n * anchor position is the center of the cluster icon.\n * @property {string} [textColor=\"black\"] The color of the label text shown on the\n * cluster icon.\n * @property {number} [textSize=11] The size (in pixels) of the label text shown on the\n * cluster icon.\n * @property {string} [textDecoration=\"none\"] The value of the CSS text-decoration\n * property for the label text shown on the cluster icon.\n * @property {string} [fontWeight=\"bold\"] The value of the CSS font-weight\n * property for the label text shown on the cluster icon.\n * @property {string} [fontStyle=\"normal\"] The value of the CSS font-style\n * property for the label text shown on the cluster icon.\n * @property {string} [fontFamily=\"Arial,sans-serif\"] The value of the CSS font-family\n * property for the label text shown on the cluster icon.\n * @property {string} [backgroundPosition=\"0 0\"] The position of the cluster icon image\n * within the image defined by url. The format is \"xpos ypos\"\n * (the same format as for the CSS background-position property). You must set\n * this property appropriately when the image defined by url represents a sprite\n * containing multiple images. Note that the position must be specified in px units.\n */\n/**\n * @name ClusterIconInfo\n * @class This class is an object containing general information about a cluster icon. This is\n * the object that a calculator function returns.\n *\n * @property {string} text The text of the label to be shown on the cluster icon.\n * @property {number} index The index plus 1 of the element in the styles\n * array to be used to style the cluster icon.\n * @property {string} title The tooltip to display when the mouse moves over the cluster icon.\n * If this value is undefined or \"\", title is set to the\n * value of the title property passed to the MarkerClusterer.\n */\n/**\n * A cluster icon.\n *\n * @constructor\n * @extends google.maps.OverlayView\n * @param {Cluster} cluster The cluster with which the icon is to be associated.\n * @param {Array} [styles] An array of {@link ClusterIconStyle} defining the cluster icons\n * to use for various cluster sizes.\n * @private\n */\nfunction ClusterIcon(cluster, styles) {\n cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);\n\n this.cluster_ = cluster;\n this.className_ = cluster.getMarkerClusterer().getClusterClass();\n this.styles_ = styles;\n this.center_ = null;\n this.div_ = null;\n this.sums_ = null;\n this.visible_ = false;\n\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n}\n\n\n/**\n * Adds the icon to the DOM.\n */\nClusterIcon.prototype.onAdd = function () {\n var cClusterIcon = this;\n var cMouseDownInCluster;\n var cDraggingMapByCluster;\n var gmVersion = google.maps.version.split(\".\");\n\n gmVersion = parseInt(gmVersion[0] * 100, 10) + parseInt(gmVersion[1], 10);\n\n this.div_ = document.createElement(\"div\");\n this.div_.className = this.className_;\n if (this.visible_) {\n this.show();\n }\n\n this.getPanes().overlayMouseTarget.appendChild(this.div_);\n\n // Fix for Issue 157\n this.boundsChangedListener_ = google.maps.event.addListener(this.getMap(), \"bounds_changed\", function () {\n cDraggingMapByCluster = cMouseDownInCluster;\n });\n\n google.maps.event.addDomListener(this.div_, \"mousedown\", function () {\n cMouseDownInCluster = true;\n cDraggingMapByCluster = false;\n });\n\n// March 1, 2018: Fix for this 3.32 exp bug, https://issuetracker.google.com/issues/73571522\n// But it doesn't work with earlier releases so do a version check.\n if (gmVersion >= 332) { // Ugly version-dependent code\n google.maps.event.addDomListener(this.div_, \"touchstart\", function (e) {\n e.stopPropagation();\n });\n }\n\n google.maps.event.addDomListener(this.div_, \"click\", function (e) {\n cMouseDownInCluster = false;\n if (!cDraggingMapByCluster) {\n var theBounds;\n var mz;\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(mc, \"click\", cClusterIcon.cluster_);\n google.maps.event.trigger(mc, \"clusterclick\", cClusterIcon.cluster_); // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (mc.getZoomOnClick()) {\n // Zoom into the cluster.\n mz = mc.getMaxZoom();\n theBounds = cClusterIcon.cluster_.getBounds();\n mc.getMap().fitBounds(theBounds);\n // There is a fix for Issue 170 here:\n setTimeout(function () {\n mc.getMap().fitBounds(theBounds);\n // Don't zoom beyond the max zoom level\n if (mz !== null && (mc.getMap().getZoom() > mz)) {\n mc.getMap().setZoom(mz + 1);\n }\n }, 100);\n }\n\n // Prevent event propagation to the map:\n e.cancelBubble = true;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n }\n });\n\n google.maps.event.addDomListener(this.div_, \"mouseover\", function () {\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(mc, \"mouseover\", cClusterIcon.cluster_);\n });\n\n google.maps.event.addDomListener(this.div_, \"mouseout\", function () {\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(mc, \"mouseout\", cClusterIcon.cluster_);\n });\n};\n\n\n/**\n * Removes the icon from the DOM.\n */\nClusterIcon.prototype.onRemove = function () {\n if (this.div_ && this.div_.parentNode) {\n this.hide();\n google.maps.event.removeListener(this.boundsChangedListener_);\n google.maps.event.clearInstanceListeners(this.div_);\n this.div_.parentNode.removeChild(this.div_);\n this.div_ = null;\n }\n};\n\n\n/**\n * Draws the icon.\n */\nClusterIcon.prototype.draw = function () {\n if (this.visible_) {\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.top = pos.y + \"px\";\n this.div_.style.left = pos.x + \"px\";\n this.div_.style.zIndex = google.maps.Marker.MAX_ZINDEX + 1; // Put above all unclustered markers\n }\n};\n\n\n/**\n * Hides the icon.\n */\nClusterIcon.prototype.hide = function () {\n if (this.div_) {\n this.div_.style.display = \"none\";\n }\n this.visible_ = false;\n};\n\n\n/**\n * Positions and shows the icon.\n */\nClusterIcon.prototype.show = function () {\n if (this.div_) {\n var img = \"\";\n // NOTE: values must be specified in px units\n var bp = this.backgroundPosition_.split(\" \");\n var spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, \"\"), 10);\n var spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, \"\"), 10);\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.cssText = this.createCss(pos);\n img = \"\";\n this.div_.innerHTML = img + \"

    \" + this.sums_.text + \"
    \";\n if (typeof this.sums_.title === \"undefined\" || this.sums_.title === \"\") {\n this.div_.title = this.cluster_.getMarkerClusterer().getTitle();\n } else {\n this.div_.title = this.sums_.title;\n }\n this.div_.style.display = \"\";\n }\n this.visible_ = true;\n};\n\n\n/**\n * Sets the icon styles to the appropriate element in the styles array.\n *\n * @param {ClusterIconInfo} sums The icon label text and styles index.\n */\nClusterIcon.prototype.useStyle = function (sums) {\n this.sums_ = sums;\n var index = Math.max(0, sums.index - 1);\n index = Math.min(this.styles_.length - 1, index);\n var style = this.styles_[index];\n this.url_ = style.url;\n this.height_ = style.height;\n this.width_ = style.width;\n this.anchorText_ = style.anchorText || [0, 0];\n this.anchorIcon_ = style.anchorIcon || [parseInt(this.height_ / 2, 10), parseInt(this.width_ / 2, 10)];\n this.textColor_ = style.textColor || \"black\";\n this.textSize_ = style.textSize || 11;\n this.textDecoration_ = style.textDecoration || \"none\";\n this.fontWeight_ = style.fontWeight || \"bold\";\n this.fontStyle_ = style.fontStyle || \"normal\";\n this.fontFamily_ = style.fontFamily || \"Arial,sans-serif\";\n this.backgroundPosition_ = style.backgroundPosition || \"0 0\";\n};\n\n\n/**\n * Sets the position at which to center the icon.\n *\n * @param {google.maps.LatLng} center The latlng to set as the center.\n */\nClusterIcon.prototype.setCenter = function (center) {\n this.center_ = center;\n};\n\n\n/**\n * Creates the cssText style parameter based on the position of the icon.\n *\n * @param {google.maps.Point} pos The position of the icon.\n * @return {string} The CSS style text.\n */\nClusterIcon.prototype.createCss = function (pos) {\n var style = [];\n style.push(\"cursor: pointer;\");\n style.push(\"position: absolute; top: \" + pos.y + \"px; left: \" + pos.x + \"px;\");\n style.push(\"width: \" + this.width_ + \"px; height: \" + this.height_ + \"px;\");\n style.push(\"-webkit-user-select: none;\");\n style.push(\"-khtml-user-select: none;\");\n style.push(\"-moz-user-select: none;\");\n style.push(\"-o-user-select: none;\");\n style.push(\"user-select: none;\");\n return style.join(\"\");\n};\n\n\n/**\n * Returns the position at which to place the DIV depending on the latlng.\n *\n * @param {google.maps.LatLng} latlng The position in latlng.\n * @return {google.maps.Point} The position in pixels.\n */\nClusterIcon.prototype.getPosFromLatLng_ = function (latlng) {\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n pos.x -= this.anchorIcon_[1];\n pos.y -= this.anchorIcon_[0];\n pos.x = parseInt(pos.x, 10);\n pos.y = parseInt(pos.y, 10);\n return pos;\n};\n\n\n/**\n * Creates a single cluster that manages a group of proximate markers.\n * Used internally, do not call this constructor directly.\n * @constructor\n * @param {MarkerClusterer} mc The MarkerClusterer object with which this\n * cluster is associated.\n */\nfunction Cluster(mc) {\n this.markerClusterer_ = mc;\n this.map_ = mc.getMap();\n this.gridSize_ = mc.getGridSize();\n this.minClusterSize_ = mc.getMinimumClusterSize();\n this.averageCenter_ = mc.getAverageCenter();\n this.markers_ = [];\n this.center_ = null;\n this.bounds_ = null;\n this.clusterIcon_ = new ClusterIcon(this, mc.getStyles());\n}\n\n\n/**\n * Returns the number of markers managed by the cluster. You can call this from\n * a click, mouseover, or mouseout event handler\n * for the MarkerClusterer object.\n *\n * @return {number} The number of markers in the cluster.\n */\nCluster.prototype.getSize = function () {\n return this.markers_.length;\n};\n\n\n/**\n * Returns the array of markers managed by the cluster. You can call this from\n * a click, mouseover, or mouseout event handler\n * for the MarkerClusterer object.\n *\n * @return {Array} The array of markers in the cluster.\n */\nCluster.prototype.getMarkers = function () {\n return this.markers_;\n};\n\n\n/**\n * Returns the center of the cluster. You can call this from\n * a click, mouseover, or mouseout event handler\n * for the MarkerClusterer object.\n *\n * @return {google.maps.LatLng} The center of the cluster.\n */\nCluster.prototype.getCenter = function () {\n return this.center_;\n};\n\n\n/**\n * Returns the map with which the cluster is associated.\n *\n * @return {google.maps.Map} The map.\n * @ignore\n */\nCluster.prototype.getMap = function () {\n return this.map_;\n};\n\n\n/**\n * Returns the MarkerClusterer object with which the cluster is associated.\n *\n * @return {MarkerClusterer} The associated marker clusterer.\n * @ignore\n */\nCluster.prototype.getMarkerClusterer = function () {\n return this.markerClusterer_;\n};\n\n\n/**\n * Returns the bounds of the cluster.\n *\n * @return {google.maps.LatLngBounds} the cluster bounds.\n * @ignore\n */\nCluster.prototype.getBounds = function () {\n var i;\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n var markers = this.getMarkers();\n for (i = 0; i < markers.length; i++) {\n bounds.extend(markers[i].getPosition());\n }\n return bounds;\n};\n\n\n/**\n * Removes the cluster from the map.\n *\n * @ignore\n */\nCluster.prototype.remove = function () {\n this.clusterIcon_.setMap(null);\n this.markers_ = [];\n delete this.markers_;\n};\n\n\n/**\n * Adds a marker to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to be added.\n * @return {boolean} True if the marker was added.\n * @ignore\n */\nCluster.prototype.addMarker = function (marker) {\n var i;\n var mCount;\n var mz;\n\n if (this.isMarkerAlreadyAdded_(marker)) {\n return false;\n }\n\n if (!this.center_) {\n this.center_ = marker.getPosition();\n this.calculateBounds_();\n } else {\n if (this.averageCenter_) {\n var l = this.markers_.length + 1;\n var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;\n var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;\n this.center_ = new google.maps.LatLng(lat, lng);\n this.calculateBounds_();\n }\n }\n\n marker.isAdded = true;\n this.markers_.push(marker);\n\n mCount = this.markers_.length;\n mz = this.markerClusterer_.getMaxZoom();\n if (mz !== null && this.map_.getZoom() > mz) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map_) {\n marker.setMap(this.map_);\n }\n } else if (mCount < this.minClusterSize_) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map_) {\n marker.setMap(this.map_);\n }\n } else if (mCount === this.minClusterSize_) {\n // Hide the markers that were showing.\n for (i = 0; i < mCount; i++) {\n this.markers_[i].setMap(null);\n }\n } else {\n marker.setMap(null);\n }\n\n this.updateIcon_();\n return true;\n};\n\n\n/**\n * Determines if a marker lies within the cluster's bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker lies in the bounds.\n * @ignore\n */\nCluster.prototype.isMarkerInClusterBounds = function (marker) {\n return this.bounds_.contains(marker.getPosition());\n};\n\n\n/**\n * Calculates the extended bounds of the cluster with the grid.\n */\nCluster.prototype.calculateBounds_ = function () {\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds);\n};\n\n\n/**\n * Updates the cluster icon.\n */\nCluster.prototype.updateIcon_ = function () {\n var mCount = this.markers_.length;\n var mz = this.markerClusterer_.getMaxZoom();\n\n if (mz !== null && this.map_.getZoom() > mz) {\n this.clusterIcon_.hide();\n return;\n }\n\n if (mCount < this.minClusterSize_) {\n // Min cluster size not yet reached.\n this.clusterIcon_.hide();\n return;\n }\n\n var numStyles = this.markerClusterer_.getStyles().length;\n var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles);\n this.clusterIcon_.setCenter(this.center_);\n this.clusterIcon_.useStyle(sums);\n this.clusterIcon_.show();\n};\n\n\n/**\n * Determines if a marker has already been added to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker has already been added.\n */\nCluster.prototype.isMarkerAlreadyAdded_ = function (marker) {\n var i;\n if (this.markers_.indexOf) {\n return this.markers_.indexOf(marker) !== -1;\n } else {\n for (i = 0; i < this.markers_.length; i++) {\n if (marker === this.markers_[i]) {\n return true;\n }\n }\n }\n return false;\n};\n\n\n/**\n * @name MarkerClustererOptions\n * @class This class represents the optional parameter passed to\n * the {@link MarkerClusterer} constructor.\n * @property {number} [gridSize=60] The grid size of a cluster in pixels. The grid is a square.\n * @property {number} [maxZoom=null] The maximum zoom level at which clustering is enabled or\n * null if clustering is to be enabled at all zoom levels.\n * @property {boolean} [zoomOnClick=true] Whether to zoom the map when a cluster marker is\n * clicked. You may want to set this to false if you have installed a handler\n * for the click event and it deals with zooming on its own.\n * @property {boolean} [averageCenter=false] Whether the position of a cluster marker should be\n * the average position of all markers in the cluster. If set to false, the\n * cluster marker is positioned at the location of the first marker added to the cluster.\n * @property {number} [minimumClusterSize=2] The minimum number of markers needed in a cluster\n * before the markers are hidden and a cluster marker appears.\n * @property {boolean} [ignoreHidden=false] Whether to ignore hidden markers in clusters. You\n * may want to set this to true to ensure that hidden markers are not included\n * in the marker count that appears on a cluster marker (this count is the value of the\n * text property of the result returned by the default calculator).\n * If set to true and you change the visibility of a marker being clustered, be\n * sure to also call MarkerClusterer.repaint().\n * @property {string} [title=\"\"] The tooltip to display when the mouse moves over a cluster\n * marker. (Alternatively, you can use a custom calculator function to specify a\n * different tooltip for each cluster marker.)\n * @property {function} [calculator=MarkerClusterer.CALCULATOR] The function used to determine\n * the text to be displayed on a cluster marker and the index indicating which style to use\n * for the cluster marker. The input parameters for the function are (1) the array of markers\n * represented by a cluster marker and (2) the number of cluster icon styles. It returns a\n * {@link ClusterIconInfo} object. The default calculator returns a\n * text property which is the number of markers in the cluster and an\n * index property which is one higher than the lowest integer such that\n * 10^i exceeds the number of markers in the cluster, or the size of the styles\n * array, whichever is less. The styles array element used has an index of\n * index minus 1. For example, the default calculator returns a\n * text value of \"125\" and an index of 3\n * for a cluster icon representing 125 markers so the element used in the styles\n * array is 2. A calculator may also return a title\n * property that contains the text of the tooltip to be used for the cluster marker. If\n * title is not defined, the tooltip is set to the value of the title\n * property for the MarkerClusterer.\n * @property {string} [clusterClass=\"cluster\"] The name of the CSS class defining general styles\n * for the cluster markers. Use this class to define CSS styles that are not set up by the code\n * that processes the styles array.\n * @property {Array} [styles] An array of {@link ClusterIconStyle} elements defining the styles\n * of the cluster markers to be used. The element to be used to style a given cluster marker\n * is determined by the function defined by the calculator property.\n * The default is an array of {@link ClusterIconStyle} elements whose properties are derived\n * from the values for imagePath, imageExtension, and\n * imageSizes.\n * @property {boolean} [enableRetinaIcons=false] Whether to allow the use of cluster icons that\n * have sizes that are some multiple (typically double) of their actual display size. Icons such\n * as these look better when viewed on high-resolution monitors such as Apple's Retina displays.\n * Note: if this property is true, sprites cannot be used as cluster icons.\n * @property {number} [batchSize=MarkerClusterer.BATCH_SIZE] Set this property to the\n * number of markers to be processed in a single batch when using a browser other than\n * Internet Explorer (for Internet Explorer, use the batchSizeIE property instead).\n * @property {number} [batchSizeIE=MarkerClusterer.BATCH_SIZE_IE] When Internet Explorer is\n * being used, markers are processed in several batches with a small delay inserted between\n * each batch in an attempt to avoid Javascript timeout errors. Set this property to the\n * number of markers to be processed in a single batch; select as high a number as you can\n * without causing a timeout error in the browser. This number might need to be as low as 100\n * if 15,000 markers are being managed, for example.\n * @property {string} [imagePath=MarkerClusterer.IMAGE_PATH]\n * The full URL of the root name of the group of image files to use for cluster icons.\n * The complete file name is of the form imagePathn.imageExtension\n * where n is the image file number (1, 2, etc.).\n * @property {string} [imageExtension=MarkerClusterer.IMAGE_EXTENSION]\n * The extension name for the cluster icon image files (e.g., \"png\" or\n * \"jpg\").\n * @property {Array} [imageSizes=MarkerClusterer.IMAGE_SIZES]\n * An array of numbers containing the widths of the group of\n * imagePathn.imageExtension image files.\n * (The images are assumed to be square.)\n */\n/**\n * Creates a MarkerClusterer object with the options specified in {@link MarkerClustererOptions}.\n * @constructor\n * @extends google.maps.OverlayView\n * @param {google.maps.Map} map The Google map to attach to.\n * @param {Array.} [opt_markers] The markers to be added to the cluster.\n * @param {MarkerClustererOptions} [opt_options] The optional parameters.\n */\nfunction MarkerClusterer(map, opt_markers, opt_options) {\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\n // extend function to extend MarkerClusterer with google.maps.OverlayView\n // because it might not always be available when the code is defined so we\n // look for it at the last possible moment. If it doesn't exist now then\n // there is no point going ahead :)\n this.extend(MarkerClusterer, google.maps.OverlayView);\n\n opt_markers = opt_markers || [];\n opt_options = opt_options || {};\n\n this.markers_ = [];\n this.clusters_ = [];\n this.listeners_ = [];\n this.activeMap_ = null;\n this.ready_ = false;\n\n this.gridSize_ = opt_options.gridSize || 60;\n this.minClusterSize_ = opt_options.minimumClusterSize || 2;\n this.maxZoom_ = opt_options.maxZoom || null;\n this.styles_ = opt_options.styles || [];\n this.title_ = opt_options.title || \"\";\n this.zoomOnClick_ = true;\n if (opt_options.zoomOnClick !== undefined) {\n this.zoomOnClick_ = opt_options.zoomOnClick;\n }\n this.averageCenter_ = false;\n if (opt_options.averageCenter !== undefined) {\n this.averageCenter_ = opt_options.averageCenter;\n }\n this.ignoreHidden_ = false;\n if (opt_options.ignoreHidden !== undefined) {\n this.ignoreHidden_ = opt_options.ignoreHidden;\n }\n this.enableRetinaIcons_ = false;\n if (opt_options.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons_ = opt_options.enableRetinaIcons;\n }\n this.imagePath_ = opt_options.imagePath || MarkerClusterer.IMAGE_PATH;\n this.imageExtension_ = opt_options.imageExtension || MarkerClusterer.IMAGE_EXTENSION;\n this.imageSizes_ = opt_options.imageSizes || MarkerClusterer.IMAGE_SIZES;\n this.calculator_ = opt_options.calculator || MarkerClusterer.CALCULATOR;\n this.batchSize_ = opt_options.batchSize || MarkerClusterer.BATCH_SIZE;\n this.batchSizeIE_ = opt_options.batchSizeIE || MarkerClusterer.BATCH_SIZE_IE;\n this.clusterClass_ = opt_options.clusterClass || \"cluster\";\n\n if (navigator.userAgent.toLowerCase().indexOf(\"msie\") !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize_ = this.batchSizeIE_;\n }\n\n this.setupStyles_();\n\n this.addMarkers(opt_markers, true);\n this.setMap(map); // Note: this causes onAdd to be called\n}\n\n\n/**\n * Implementation of the onAdd interface method.\n * @ignore\n */\nMarkerClusterer.prototype.onAdd = function () {\n var cMarkerClusterer = this;\n\n this.activeMap_ = this.getMap();\n this.ready_ = true;\n\n this.repaint();\n\n this.prevZoom_ = this.getMap().getZoom();\n\n // Add the map event listeners\n this.listeners_ = [\n google.maps.event.addListener(this.getMap(), \"zoom_changed\", function () {\n // Fix for bug #407\n // Determines map type and prevents illegal zoom levels\n var zoom = this.getMap().getZoom();\n var minZoom = this.getMap().minZoom || 0;\n var maxZoom = Math.min(this.getMap().maxZoom || 100,\n this.getMap().mapTypes[this.getMap().getMapTypeId()].maxZoom);\n zoom = Math.min(Math.max(zoom, minZoom), maxZoom);\n\n if (this.prevZoom_ != zoom) {\n this.prevZoom_ = zoom;\n this.resetViewport_(false);\n }\n }.bind(this)),\n google.maps.event.addListener(this.getMap(), \"idle\", function () {\n cMarkerClusterer.redraw_();\n })\n ];\n};\n\n\n/**\n * Implementation of the onRemove interface method.\n * Removes map event listeners and all cluster icons from the DOM.\n * All managed markers are also put back on the map.\n * @ignore\n */\nMarkerClusterer.prototype.onRemove = function () {\n var i;\n\n // Put all the managed markers back on the map:\n for (i = 0; i < this.markers_.length; i++) {\n if (this.markers_[i].getMap() !== this.activeMap_) {\n this.markers_[i].setMap(this.activeMap_);\n }\n }\n\n // Remove all clusters:\n for (i = 0; i < this.clusters_.length; i++) {\n this.clusters_[i].remove();\n }\n this.clusters_ = [];\n\n // Remove map event listeners:\n for (i = 0; i < this.listeners_.length; i++) {\n google.maps.event.removeListener(this.listeners_[i]);\n }\n this.listeners_ = [];\n\n this.activeMap_ = null;\n this.ready_ = false;\n};\n\n\n/**\n * Implementation of the draw interface method.\n * @ignore\n */\nMarkerClusterer.prototype.draw = function () {};\n\n\n/**\n * Sets up the styles object.\n */\nMarkerClusterer.prototype.setupStyles_ = function () {\n var i, size;\n if (this.styles_.length > 0) {\n return;\n }\n\n for (i = 0; i < this.imageSizes_.length; i++) {\n size = this.imageSizes_[i];\n this.styles_.push({\n url: this.imagePath_ + (i + 1) + \".\" + this.imageExtension_,\n height: size,\n width: size\n });\n }\n};\n\n\n/**\n * Fits the map to the bounds of the markers managed by the clusterer.\n */\nMarkerClusterer.prototype.fitMapToMarkers = function () {\n var i;\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (i = 0; i < markers.length; i++) {\n // March 3, 2018: Bug fix -- honor the ignoreHidden property\n if (markers[i].getVisible() || !this.getIgnoreHidden()) {\n bounds.extend(markers[i].getPosition());\n }\n }\n\n this.getMap().fitBounds(bounds);\n};\n\n\n/**\n * Returns the value of the gridSize property.\n *\n * @return {number} The grid size.\n */\nMarkerClusterer.prototype.getGridSize = function () {\n return this.gridSize_;\n};\n\n\n/**\n * Sets the value of the gridSize property.\n *\n * @param {number} gridSize The grid size.\n */\nMarkerClusterer.prototype.setGridSize = function (gridSize) {\n this.gridSize_ = gridSize;\n};\n\n\n/**\n * Returns the value of the minimumClusterSize property.\n *\n * @return {number} The minimum cluster size.\n */\nMarkerClusterer.prototype.getMinimumClusterSize = function () {\n return this.minClusterSize_;\n};\n\n/**\n * Sets the value of the minimumClusterSize property.\n *\n * @param {number} minimumClusterSize The minimum cluster size.\n */\nMarkerClusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {\n this.minClusterSize_ = minimumClusterSize;\n};\n\n\n/**\n * Returns the value of the maxZoom property.\n *\n * @return {number} The maximum zoom level.\n */\nMarkerClusterer.prototype.getMaxZoom = function () {\n return this.maxZoom_;\n};\n\n\n/**\n * Sets the value of the maxZoom property.\n *\n * @param {number} maxZoom The maximum zoom level.\n */\nMarkerClusterer.prototype.setMaxZoom = function (maxZoom) {\n this.maxZoom_ = maxZoom;\n};\n\n\n/**\n * Returns the value of the styles property.\n *\n * @return {Array} The array of styles defining the cluster markers to be used.\n */\nMarkerClusterer.prototype.getStyles = function () {\n return this.styles_;\n};\n\n\n/**\n * Sets the value of the styles property.\n *\n * @param {Array.} styles The array of styles to use.\n */\nMarkerClusterer.prototype.setStyles = function (styles) {\n this.styles_ = styles;\n};\n\n\n/**\n * Returns the value of the title property.\n *\n * @return {string} The content of the title text.\n */\nMarkerClusterer.prototype.getTitle = function () {\n return this.title_;\n};\n\n\n/**\n * Sets the value of the title property.\n *\n * @param {string} title The value of the title property.\n */\nMarkerClusterer.prototype.setTitle = function (title) {\n this.title_ = title;\n};\n\n\n/**\n * Returns the value of the zoomOnClick property.\n *\n * @return {boolean} True if zoomOnClick property is set.\n */\nMarkerClusterer.prototype.getZoomOnClick = function () {\n return this.zoomOnClick_;\n};\n\n\n/**\n * Sets the value of the zoomOnClick property.\n *\n * @param {boolean} zoomOnClick The value of the zoomOnClick property.\n */\nMarkerClusterer.prototype.setZoomOnClick = function (zoomOnClick) {\n this.zoomOnClick_ = zoomOnClick;\n};\n\n\n/**\n * Returns the value of the averageCenter property.\n *\n * @return {boolean} True if averageCenter property is set.\n */\nMarkerClusterer.prototype.getAverageCenter = function () {\n return this.averageCenter_;\n};\n\n\n/**\n * Sets the value of the averageCenter property.\n *\n * @param {boolean} averageCenter The value of the averageCenter property.\n */\nMarkerClusterer.prototype.setAverageCenter = function (averageCenter) {\n this.averageCenter_ = averageCenter;\n};\n\n\n/**\n * Returns the value of the ignoreHidden property.\n *\n * @return {boolean} True if ignoreHidden property is set.\n */\nMarkerClusterer.prototype.getIgnoreHidden = function () {\n return this.ignoreHidden_;\n};\n\n\n/**\n * Sets the value of the ignoreHidden property.\n *\n * @param {boolean} ignoreHidden The value of the ignoreHidden property.\n */\nMarkerClusterer.prototype.setIgnoreHidden = function (ignoreHidden) {\n this.ignoreHidden_ = ignoreHidden;\n};\n\n\n/**\n * Returns the value of the enableRetinaIcons property.\n *\n * @return {boolean} True if enableRetinaIcons property is set.\n */\nMarkerClusterer.prototype.getEnableRetinaIcons = function () {\n return this.enableRetinaIcons_;\n};\n\n\n/**\n * Sets the value of the enableRetinaIcons property.\n *\n * @param {boolean} enableRetinaIcons The value of the enableRetinaIcons property.\n */\nMarkerClusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {\n this.enableRetinaIcons_ = enableRetinaIcons;\n};\n\n\n/**\n * Returns the value of the imageExtension property.\n *\n * @return {string} The value of the imageExtension property.\n */\nMarkerClusterer.prototype.getImageExtension = function () {\n return this.imageExtension_;\n};\n\n\n/**\n * Sets the value of the imageExtension property.\n *\n * @param {string} imageExtension The value of the imageExtension property.\n */\nMarkerClusterer.prototype.setImageExtension = function (imageExtension) {\n this.imageExtension_ = imageExtension;\n};\n\n\n/**\n * Returns the value of the imagePath property.\n *\n * @return {string} The value of the imagePath property.\n */\nMarkerClusterer.prototype.getImagePath = function () {\n return this.imagePath_;\n};\n\n\n/**\n * Sets the value of the imagePath property.\n *\n * @param {string} imagePath The value of the imagePath property.\n */\nMarkerClusterer.prototype.setImagePath = function (imagePath) {\n this.imagePath_ = imagePath;\n};\n\n\n/**\n * Returns the value of the imageSizes property.\n *\n * @return {Array} The value of the imageSizes property.\n */\nMarkerClusterer.prototype.getImageSizes = function () {\n return this.imageSizes_;\n};\n\n\n/**\n * Sets the value of the imageSizes property.\n *\n * @param {Array} imageSizes The value of the imageSizes property.\n */\nMarkerClusterer.prototype.setImageSizes = function (imageSizes) {\n this.imageSizes_ = imageSizes;\n};\n\n\n/**\n * Returns the value of the calculator property.\n *\n * @return {function} the value of the calculator property.\n */\nMarkerClusterer.prototype.getCalculator = function () {\n return this.calculator_;\n};\n\n\n/**\n * Sets the value of the calculator property.\n *\n * @param {function(Array., number)} calculator The value\n * of the calculator property.\n */\nMarkerClusterer.prototype.setCalculator = function (calculator) {\n this.calculator_ = calculator;\n};\n\n\n/**\n * Returns the value of the batchSizeIE property.\n *\n * @return {number} the value of the batchSizeIE property.\n */\nMarkerClusterer.prototype.getBatchSizeIE = function () {\n return this.batchSizeIE_;\n};\n\n\n/**\n * Sets the value of the batchSizeIE property.\n *\n * @param {number} batchSizeIE The value of the batchSizeIE property.\n */\nMarkerClusterer.prototype.setBatchSizeIE = function (batchSizeIE) {\n this.batchSizeIE_ = batchSizeIE;\n};\n\n\n/**\n * Returns the value of the clusterClass property.\n *\n * @return {string} the value of the clusterClass property.\n */\nMarkerClusterer.prototype.getClusterClass = function () {\n return this.clusterClass_;\n};\n\n\n/**\n * Sets the value of the clusterClass property.\n *\n * @param {string} clusterClass The value of the clusterClass property.\n */\nMarkerClusterer.prototype.setClusterClass = function (clusterClass) {\n this.clusterClass_ = clusterClass;\n};\n\n\n/**\n * Returns the array of markers managed by the clusterer.\n *\n * @return {Array} The array of markers managed by the clusterer.\n */\nMarkerClusterer.prototype.getMarkers = function () {\n return this.markers_;\n};\n\n\n/**\n * Returns the number of markers managed by the clusterer.\n *\n * @return {number} The number of markers.\n */\nMarkerClusterer.prototype.getTotalMarkers = function () {\n return this.markers_.length;\n};\n\n\n/**\n * Returns the current array of clusters formed by the clusterer.\n *\n * @return {Array} The array of clusters formed by the clusterer.\n */\nMarkerClusterer.prototype.getClusters = function () {\n return this.clusters_;\n};\n\n\n/**\n * Returns the number of clusters formed by the clusterer.\n *\n * @return {number} The number of clusters formed by the clusterer.\n */\nMarkerClusterer.prototype.getTotalClusters = function () {\n return this.clusters_.length;\n};\n\n\n/**\n * Adds a marker to the clusterer. The clusters are redrawn unless\n * opt_nodraw is set to true.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @param {boolean} [opt_nodraw] Set to true to prevent redrawing.\n */\nMarkerClusterer.prototype.addMarker = function (marker, opt_nodraw) {\n this.pushMarkerTo_(marker);\n if (!opt_nodraw) {\n this.redraw_();\n }\n};\n\n\n/**\n * Adds an array of markers to the clusterer. The clusters are redrawn unless\n * opt_nodraw is set to true.\n *\n * @param {Array.} markers The markers to add.\n * @param {boolean} [opt_nodraw] Set to true to prevent redrawing.\n */\nMarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) {\n var key;\n for (key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo_(markers[key]);\n }\n }\n if (!opt_nodraw) {\n this.redraw_();\n }\n};\n\n\n/**\n * Pushes a marker to the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to add.\n */\nMarkerClusterer.prototype.pushMarkerTo_ = function (marker) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n var cMarkerClusterer = this;\n google.maps.event.addListener(marker, \"dragend\", function () {\n if (cMarkerClusterer.ready_) {\n this.isAdded = false;\n cMarkerClusterer.repaint();\n }\n });\n }\n marker.isAdded = false;\n this.markers_.push(marker);\n};\n\n\n/**\n * Removes a marker from the cluster. The clusters are redrawn unless\n * opt_nodraw is set to true. Returns true if the\n * marker was removed from the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to remove.\n * @param {boolean} [opt_nodraw] Set to true to prevent redrawing.\n * @return {boolean} True if the marker was removed from the clusterer.\n */\nMarkerClusterer.prototype.removeMarker = function (marker, opt_nodraw) {\n var removed = this.removeMarker_(marker);\n\n if (!opt_nodraw && removed) {\n this.repaint();\n }\n\n return removed;\n};\n\n\n/**\n * Removes an array of markers from the cluster. The clusters are redrawn unless\n * opt_nodraw is set to true. Returns true if markers\n * were removed from the clusterer.\n *\n * @param {Array.} markers The markers to remove.\n * @param {boolean} [opt_nodraw] Set to true to prevent redrawing.\n * @return {boolean} True if markers were removed from the clusterer.\n */\nMarkerClusterer.prototype.removeMarkers = function (markers, opt_nodraw) {\n var i, r;\n var removed = false;\n\n for (i = 0; i < markers.length; i++) {\n r = this.removeMarker_(markers[i]);\n removed = removed || r;\n }\n\n if (!opt_nodraw && removed) {\n this.repaint();\n }\n\n return removed;\n};\n\n\n/**\n * Removes a marker and returns true if removed, false if not.\n *\n * @param {google.maps.Marker} marker The marker to remove\n * @return {boolean} Whether the marker was removed or not\n */\nMarkerClusterer.prototype.removeMarker_ = function (marker) {\n var i;\n var index = -1;\n if (this.markers_.indexOf) {\n index = this.markers_.indexOf(marker);\n } else {\n for (i = 0; i < this.markers_.length; i++) {\n if (marker === this.markers_[i]) {\n index = i;\n break;\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n\n marker.setMap(null);\n this.markers_.splice(index, 1); // Remove the marker from the list of managed markers\n return true;\n};\n\n\n/**\n * Removes all clusters and markers from the map and also removes all markers\n * managed by the clusterer.\n */\nMarkerClusterer.prototype.clearMarkers = function () {\n this.resetViewport_(true);\n this.markers_ = [];\n};\n\n\n/**\n * Recalculates and redraws all the marker clusters from scratch.\n * Call this after changing any properties.\n */\nMarkerClusterer.prototype.repaint = function () {\n var oldClusters = this.clusters_.slice();\n this.clusters_ = [];\n this.resetViewport_(false);\n this.redraw_();\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function () {\n var i;\n for (i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove();\n }\n }, 0);\n};\n\n\n/**\n * Returns the current bounds extended by the grid size.\n *\n * @param {google.maps.LatLngBounds} bounds The bounds to extend.\n * @return {google.maps.LatLngBounds} The extended bounds.\n * @ignore\n */\nMarkerClusterer.prototype.getExtendedBounds = function (bounds) {\n var projection = this.getProjection();\n\n // Turn the bounds into latlng.\n var tr = new google.maps.LatLng(bounds.getNorthEast().lat(),\n bounds.getNorthEast().lng());\n var bl = new google.maps.LatLng(bounds.getSouthWest().lat(),\n bounds.getSouthWest().lng());\n\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(tr);\n trPix.x += this.gridSize_;\n trPix.y -= this.gridSize_;\n\n var blPix = projection.fromLatLngToDivPixel(bl);\n blPix.x -= this.gridSize_;\n blPix.y += this.gridSize_;\n\n // Convert the pixel points back to LatLng\n var ne = projection.fromDivPixelToLatLng(trPix);\n var sw = projection.fromDivPixelToLatLng(blPix);\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(ne);\n bounds.extend(sw);\n\n return bounds;\n};\n\n\n/**\n * Redraws all the clusters.\n */\nMarkerClusterer.prototype.redraw_ = function () {\n this.createClusters_(0);\n};\n\n\n/**\n * Removes all clusters from the map. The markers are also removed from the map\n * if opt_hide is set to true.\n *\n * @param {boolean} [opt_hide] Set to true to also remove the markers\n * from the map.\n */\nMarkerClusterer.prototype.resetViewport_ = function (opt_hide) {\n var i, marker;\n // Remove all the clusters\n for (i = 0; i < this.clusters_.length; i++) {\n this.clusters_[i].remove();\n }\n this.clusters_ = [];\n\n // Reset the markers to not be added and to be removed from the map.\n for (i = 0; i < this.markers_.length; i++) {\n marker = this.markers_[i];\n marker.isAdded = false;\n if (opt_hide) {\n marker.setMap(null);\n }\n }\n};\n\n\n/**\n * Calculates the distance between two latlng locations in km.\n *\n * @param {google.maps.LatLng} p1 The first lat lng point.\n * @param {google.maps.LatLng} p2 The second lat lng point.\n * @return {number} The distance between the two points in km.\n * @see http://www.movable-type.co.uk/scripts/latlong.html\n*/\nMarkerClusterer.prototype.distanceBetweenPoints_ = function (p1, p2) {\n var R = 6371; // Radius of the Earth in km\n var dLat = (p2.lat() - p1.lat()) * Math.PI / 180;\n var dLon = (p2.lng() - p1.lng()) * Math.PI / 180;\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) *\n Math.sin(dLon / 2) * Math.sin(dLon / 2);\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n var d = R * c;\n return d;\n};\n\n\n/**\n * Determines if a marker is contained in a bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @param {google.maps.LatLngBounds} bounds The bounds to check against.\n * @return {boolean} True if the marker is in the bounds.\n */\nMarkerClusterer.prototype.isMarkerInBounds_ = function (marker, bounds) {\n return bounds.contains(marker.getPosition());\n};\n\n\n/**\n * Adds a marker to a cluster, or creates a new cluster.\n *\n * @param {google.maps.Marker} marker The marker to add.\n */\nMarkerClusterer.prototype.addToClosestCluster_ = function (marker) {\n var i, d, cluster, center;\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (i = 0; i < this.clusters_.length; i++) {\n cluster = this.clusters_[i];\n center = cluster.getCenter();\n if (center) {\n d = this.distanceBetweenPoints_(center, marker.getPosition());\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n } else {\n cluster = new Cluster(this);\n cluster.addMarker(marker);\n this.clusters_.push(cluster);\n }\n};\n\n\n/**\n * Creates the clusters. This is done in batches to avoid timeout errors\n * in some browsers when there is a huge number of markers.\n *\n * @param {number} iFirst The index of the first marker in the batch of\n * markers to be added to clusters.\n */\nMarkerClusterer.prototype.createClusters_ = function (iFirst) {\n var i, marker;\n var mapBounds;\n var cMarkerClusterer = this;\n if (!this.ready_) {\n return;\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the MarkerClusterer begins\n * clustering markers.\n * @name MarkerClusterer#clusteringbegin\n * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, \"clusteringbegin\", this);\n\n if (typeof this.timerRefStatic !== \"undefined\") {\n clearTimeout(this.timerRefStatic);\n delete this.timerRefStatic;\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n if (this.getMap().getZoom() > 3) {\n mapBounds = new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),\n this.getMap().getBounds().getNorthEast());\n } else {\n mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n }\n var bounds = this.getExtendedBounds(mapBounds);\n\n var iLast = Math.min(iFirst + this.batchSize_, this.markers_.length);\n\n for (i = iFirst; i < iLast; i++) {\n marker = this.markers_[i];\n if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {\n if (!this.ignoreHidden_ || (this.ignoreHidden_ && marker.getVisible())) {\n this.addToClosestCluster_(marker);\n }\n }\n }\n\n if (iLast < this.markers_.length) {\n this.timerRefStatic = setTimeout(function () {\n cMarkerClusterer.createClusters_(iLast);\n }, 0);\n } else {\n delete this.timerRefStatic;\n\n /**\n * This event is fired when the MarkerClusterer stops\n * clustering markers.\n * @name MarkerClusterer#clusteringend\n * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, \"clusteringend\", this);\n }\n};\n\n\n/**\n * Extends an object's prototype by another's.\n *\n * @param {Object} obj1 The object to be extended.\n * @param {Object} obj2 The object to extend with.\n * @return {Object} The new extended object.\n * @ignore\n */\nMarkerClusterer.prototype.extend = function (obj1, obj2) {\n return (function (object) {\n var property;\n for (property in object.prototype) {\n this.prototype[property] = object.prototype[property];\n }\n return this;\n }).apply(obj1, [obj2]);\n};\n\n\n/**\n * The default function for determining the label text and style\n * for a cluster icon.\n *\n * @param {Array.} markers The array of markers represented by the cluster.\n * @param {number} numStyles The number of marker styles available.\n * @return {ClusterIconInfo} The information resource for the cluster.\n * @constant\n * @ignore\n */\nMarkerClusterer.CALCULATOR = function (markers, numStyles) {\n var index = 0;\n var title = \"\";\n var count = markers.length.toString();\n\n var dv = count;\n while (dv !== 0) {\n dv = parseInt(dv / 10, 10);\n index++;\n }\n\n index = Math.min(index, numStyles);\n return {\n text: count,\n index: index,\n title: title\n };\n};\n\n\n/**\n * The number of markers to process in one batch.\n *\n * @type {number}\n * @constant\n */\nMarkerClusterer.BATCH_SIZE = 2000;\n\n\n/**\n * The number of markers to process in one batch (IE only).\n *\n * @type {number}\n * @constant\n */\nMarkerClusterer.BATCH_SIZE_IE = 500;\n\n\n/**\n * The default root name for the marker cluster images.\n *\n * @type {string}\n * @constant\n */\nMarkerClusterer.IMAGE_PATH = \"../images/m\";\n\n\n/**\n * The default extension name for the marker cluster images.\n *\n * @type {string}\n * @constant\n */\nMarkerClusterer.IMAGE_EXTENSION = \"png\";\n\n\n/**\n * The default array of sizes for the marker cluster images.\n *\n * @type {Array.}\n * @constant\n */\nMarkerClusterer.IMAGE_SIZES = [53, 56, 66, 78, 90];\n\nif (typeof module == 'object') {\n module.exports = MarkerClusterer;\n}","// Ion.RangeSlider\n// version 2.3.0 Build: 381\n// © Denis Ineshin, 2018\n// https://github.com/IonDen\n//\n// Project page: http://ionden.com/a/plugins/ion.rangeSlider/en.html\n// GitHub page: https://github.com/IonDen/ion.rangeSlider\n//\n// Released under MIT licence:\n// http://ionden.com/a/plugins/licence-en.html\n// =====================================================================================================================\n\n;(function(factory) {\n if (!jQuery && typeof define === \"function\" && define.amd) {\n define([\"jquery\"], function (jQuery) {\n return factory(jQuery, document, window, navigator);\n });\n } else if (!jQuery && typeof exports === \"object\") {\n factory(require(\"jquery\"), document, window, navigator);\n } else {\n factory(jQuery, document, window, navigator);\n }\n} (function ($, document, window, navigator, undefined) {\n \"use strict\";\n\n // =================================================================================================================\n // Service\n\n var plugin_count = 0;\n\n // IE8 fix\n var is_old_ie = (function () {\n var n = navigator.userAgent,\n r = /msie\\s\\d+/i,\n v;\n if (n.search(r) > 0) {\n v = r.exec(n).toString();\n v = v.split(\" \")[1];\n if (v < 9) {\n $(\"html\").addClass(\"lt-ie9\");\n return true;\n }\n }\n return false;\n } ());\n if (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) {\n\n var target = this;\n var slice = [].slice;\n\n if (typeof target != \"function\") {\n throw new TypeError();\n }\n\n var args = slice.call(arguments, 1),\n bound = function () {\n\n if (this instanceof bound) {\n\n var F = function(){};\n F.prototype = target.prototype;\n var self = new F();\n\n var result = target.apply(\n self,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return self;\n\n } else {\n\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n\n return bound;\n };\n }\n if (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function(searchElement, fromIndex) {\n var k;\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = +fromIndex || 0;\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n if (n >= len) {\n return -1;\n }\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n };\n }\n\n\n\n // =================================================================================================================\n // Template\n\n var base_html =\n '' +\n '' +\n '01' +\n '000' +\n '' +\n '';\n\n var single_html =\n '' +\n '' +\n '';\n\n var double_html =\n '' +\n '' +\n '' +\n '' +\n '';\n\n var disable_html =\n '';\n\n\n\n // =================================================================================================================\n // Core\n\n /**\n * Main plugin constructor\n *\n * @param input {Object} link to base input element\n * @param options {Object} slider config\n * @param plugin_count {Number}\n * @constructor\n */\n var IonRangeSlider = function (input, options, plugin_count) {\n this.VERSION = \"2.3.0\";\n this.input = input;\n this.plugin_count = plugin_count;\n this.current_plugin = 0;\n this.calc_count = 0;\n this.update_tm = 0;\n this.old_from = 0;\n this.old_to = 0;\n this.old_min_interval = null;\n this.raf_id = null;\n this.dragging = false;\n this.force_redraw = false;\n this.no_diapason = false;\n this.has_tab_index = true;\n this.is_key = false;\n this.is_update = false;\n this.is_start = true;\n this.is_finish = false;\n this.is_active = false;\n this.is_resize = false;\n this.is_click = false;\n\n options = options || {};\n\n // cache for links to all DOM elements\n this.$cache = {\n win: $(window),\n body: $(document.body),\n input: $(input),\n cont: null,\n rs: null,\n min: null,\n max: null,\n from: null,\n to: null,\n single: null,\n bar: null,\n line: null,\n s_single: null,\n s_from: null,\n s_to: null,\n shad_single: null,\n shad_from: null,\n shad_to: null,\n edge: null,\n grid: null,\n grid_labels: []\n };\n\n // storage for measure variables\n this.coords = {\n // left\n x_gap: 0,\n x_pointer: 0,\n\n // width\n w_rs: 0,\n w_rs_old: 0,\n w_handle: 0,\n\n // percents\n p_gap: 0,\n p_gap_left: 0,\n p_gap_right: 0,\n p_step: 0,\n p_pointer: 0,\n p_handle: 0,\n p_single_fake: 0,\n p_single_real: 0,\n p_from_fake: 0,\n p_from_real: 0,\n p_to_fake: 0,\n p_to_real: 0,\n p_bar_x: 0,\n p_bar_w: 0,\n\n // grid\n grid_gap: 0,\n big_num: 0,\n big: [],\n big_w: [],\n big_p: [],\n big_x: []\n };\n\n // storage for labels measure variables\n this.labels = {\n // width\n w_min: 0,\n w_max: 0,\n w_from: 0,\n w_to: 0,\n w_single: 0,\n\n // percents\n p_min: 0,\n p_max: 0,\n p_from_fake: 0,\n p_from_left: 0,\n p_to_fake: 0,\n p_to_left: 0,\n p_single_fake: 0,\n p_single_left: 0\n };\n\n\n\n /**\n * get and validate config\n */\n var $inp = this.$cache.input,\n val = $inp.prop(\"value\"),\n config, config_from_data, prop;\n\n // default config\n config = {\n skin: \"flat\",\n type: \"single\",\n\n min: 10,\n max: 100,\n from: null,\n to: null,\n step: 1,\n\n min_interval: 0,\n max_interval: 0,\n drag_interval: false,\n\n values: [],\n p_values: [],\n\n from_fixed: false,\n from_min: null,\n from_max: null,\n from_shadow: false,\n\n to_fixed: false,\n to_min: null,\n to_max: null,\n to_shadow: false,\n\n prettify_enabled: true,\n prettify_separator: \" \",\n prettify: null,\n\n force_edges: false,\n\n keyboard: true,\n\n grid: false,\n grid_margin: true,\n grid_num: 4,\n grid_snap: false,\n\n hide_min_max: false,\n hide_from_to: false,\n\n prefix: \"\",\n postfix: \"\",\n max_postfix: \"\",\n decorate_both: true,\n values_separator: \" — \",\n\n input_values_separator: \";\",\n\n disable: false,\n block: false,\n\n extra_classes: \"\",\n\n scope: null,\n onStart: null,\n onChange: null,\n onFinish: null,\n onUpdate: null\n };\n\n\n // check if base element is input\n if ($inp[0].nodeName !== \"INPUT\") {\n console && console.warn && console.warn(\"Base element should be !\", $inp[0]);\n }\n\n\n // config from data-attributes extends js config\n config_from_data = {\n skin: $inp.data(\"skin\"),\n type: $inp.data(\"type\"),\n\n min: $inp.data(\"min\"),\n max: $inp.data(\"max\"),\n from: $inp.data(\"from\"),\n to: $inp.data(\"to\"),\n step: $inp.data(\"step\"),\n\n min_interval: $inp.data(\"minInterval\"),\n max_interval: $inp.data(\"maxInterval\"),\n drag_interval: $inp.data(\"dragInterval\"),\n\n values: $inp.data(\"values\"),\n\n from_fixed: $inp.data(\"fromFixed\"),\n from_min: $inp.data(\"fromMin\"),\n from_max: $inp.data(\"fromMax\"),\n from_shadow: $inp.data(\"fromShadow\"),\n\n to_fixed: $inp.data(\"toFixed\"),\n to_min: $inp.data(\"toMin\"),\n to_max: $inp.data(\"toMax\"),\n to_shadow: $inp.data(\"toShadow\"),\n\n prettify_enabled: $inp.data(\"prettifyEnabled\"),\n prettify_separator: $inp.data(\"prettifySeparator\"),\n\n force_edges: $inp.data(\"forceEdges\"),\n\n keyboard: $inp.data(\"keyboard\"),\n\n grid: $inp.data(\"grid\"),\n grid_margin: $inp.data(\"gridMargin\"),\n grid_num: $inp.data(\"gridNum\"),\n grid_snap: $inp.data(\"gridSnap\"),\n\n hide_min_max: $inp.data(\"hideMinMax\"),\n hide_from_to: $inp.data(\"hideFromTo\"),\n\n prefix: $inp.data(\"prefix\"),\n postfix: $inp.data(\"postfix\"),\n max_postfix: $inp.data(\"maxPostfix\"),\n decorate_both: $inp.data(\"decorateBoth\"),\n values_separator: $inp.data(\"valuesSeparator\"),\n\n input_values_separator: $inp.data(\"inputValuesSeparator\"),\n\n disable: $inp.data(\"disable\"),\n block: $inp.data(\"block\"),\n\n extra_classes: $inp.data(\"extraClasses\"),\n };\n config_from_data.values = config_from_data.values && config_from_data.values.split(\",\");\n\n for (prop in config_from_data) {\n if (config_from_data.hasOwnProperty(prop)) {\n if (config_from_data[prop] === undefined || config_from_data[prop] === \"\") {\n delete config_from_data[prop];\n }\n }\n }\n\n\n // input value extends default config\n if (val !== undefined && val !== \"\") {\n val = val.split(config_from_data.input_values_separator || options.input_values_separator || \";\");\n\n if (val[0] && val[0] == +val[0]) {\n val[0] = +val[0];\n }\n if (val[1] && val[1] == +val[1]) {\n val[1] = +val[1];\n }\n\n if (options && options.values && options.values.length) {\n config.from = val[0] && options.values.indexOf(val[0]);\n config.to = val[1] && options.values.indexOf(val[1]);\n } else {\n config.from = val[0] && +val[0];\n config.to = val[1] && +val[1];\n }\n }\n\n\n\n // js config extends default config\n $.extend(config, options);\n\n\n // data config extends config\n $.extend(config, config_from_data);\n this.options = config;\n\n\n\n // validate config, to be sure that all data types are correct\n this.update_check = {};\n this.validate();\n\n\n\n // default result object, returned to callbacks\n this.result = {\n input: this.$cache.input,\n slider: null,\n\n min: this.options.min,\n max: this.options.max,\n\n from: this.options.from,\n from_percent: 0,\n from_value: null,\n\n to: this.options.to,\n to_percent: 0,\n to_value: null\n };\n\n\n\n this.init();\n };\n\n IonRangeSlider.prototype = {\n\n /**\n * Starts or updates the plugin instance\n *\n * @param [is_update] {boolean}\n */\n init: function (is_update) {\n this.no_diapason = false;\n this.coords.p_step = this.convertToPercent(this.options.step, true);\n\n this.target = \"base\";\n\n this.toggleInput();\n this.append();\n this.setMinMax();\n\n if (is_update) {\n this.force_redraw = true;\n this.calc(true);\n\n // callbacks called\n this.callOnUpdate();\n } else {\n this.force_redraw = true;\n this.calc(true);\n\n // callbacks called\n this.callOnStart();\n }\n\n this.updateScene();\n },\n\n /**\n * Appends slider template to a DOM\n */\n append: function () {\n var container_html = '';\n this.$cache.input.before(container_html);\n this.$cache.input.prop(\"readonly\", true);\n this.$cache.cont = this.$cache.input.prev();\n this.result.slider = this.$cache.cont;\n\n this.$cache.cont.html(base_html);\n this.$cache.rs = this.$cache.cont.find(\".irs\");\n this.$cache.min = this.$cache.cont.find(\".irs-min\");\n this.$cache.max = this.$cache.cont.find(\".irs-max\");\n this.$cache.from = this.$cache.cont.find(\".irs-from\");\n this.$cache.to = this.$cache.cont.find(\".irs-to\");\n this.$cache.single = this.$cache.cont.find(\".irs-single\");\n this.$cache.line = this.$cache.cont.find(\".irs-line\");\n this.$cache.grid = this.$cache.cont.find(\".irs-grid\");\n\n if (this.options.type === \"single\") {\n this.$cache.cont.append(single_html);\n this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n this.$cache.edge = this.$cache.cont.find(\".irs-bar-edge\");\n this.$cache.s_single = this.$cache.cont.find(\".single\");\n this.$cache.from[0].style.visibility = \"hidden\";\n this.$cache.to[0].style.visibility = \"hidden\";\n this.$cache.shad_single = this.$cache.cont.find(\".shadow-single\");\n } else {\n this.$cache.cont.append(double_html);\n this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n this.$cache.s_from = this.$cache.cont.find(\".from\");\n this.$cache.s_to = this.$cache.cont.find(\".to\");\n this.$cache.shad_from = this.$cache.cont.find(\".shadow-from\");\n this.$cache.shad_to = this.$cache.cont.find(\".shadow-to\");\n\n this.setTopHandler();\n }\n\n if (this.options.hide_from_to) {\n this.$cache.from[0].style.display = \"none\";\n this.$cache.to[0].style.display = \"none\";\n this.$cache.single[0].style.display = \"none\";\n }\n\n this.appendGrid();\n\n if (this.options.disable) {\n this.appendDisableMask();\n this.$cache.input[0].disabled = true;\n } else {\n this.$cache.input[0].disabled = false;\n this.removeDisableMask();\n this.bindEvents();\n }\n\n // block only if not disabled\n if (!this.options.disable) {\n if (this.options.block) {\n this.appendDisableMask();\n } else {\n this.removeDisableMask();\n }\n }\n\n if (this.options.drag_interval) {\n this.$cache.bar[0].style.cursor = \"ew-resize\";\n }\n },\n\n /**\n * Determine which handler has a priority\n * works only for double slider type\n */\n setTopHandler: function () {\n var min = this.options.min,\n max = this.options.max,\n from = this.options.from,\n to = this.options.to;\n\n if (from > min && to === max) {\n this.$cache.s_from.addClass(\"type_last\");\n } else if (to < max) {\n this.$cache.s_to.addClass(\"type_last\");\n }\n },\n\n /**\n * Determine which handles was clicked last\n * and which handler should have hover effect\n *\n * @param target {String}\n */\n changeLevel: function (target) {\n switch (target) {\n case \"single\":\n this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake);\n this.$cache.s_single.addClass(\"state_hover\");\n break;\n case \"from\":\n this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n this.$cache.s_from.addClass(\"state_hover\");\n this.$cache.s_from.addClass(\"type_last\");\n this.$cache.s_to.removeClass(\"type_last\");\n break;\n case \"to\":\n this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake);\n this.$cache.s_to.addClass(\"state_hover\");\n this.$cache.s_to.addClass(\"type_last\");\n this.$cache.s_from.removeClass(\"type_last\");\n break;\n case \"both\":\n this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer);\n this.$cache.s_to.removeClass(\"type_last\");\n this.$cache.s_from.removeClass(\"type_last\");\n break;\n }\n },\n\n /**\n * Then slider is disabled\n * appends extra layer with opacity\n */\n appendDisableMask: function () {\n this.$cache.cont.append(disable_html);\n this.$cache.cont.addClass(\"irs-disabled\");\n },\n\n /**\n * Then slider is not disabled\n * remove disable mask\n */\n removeDisableMask: function () {\n this.$cache.cont.remove(\".irs-disable-mask\");\n this.$cache.cont.removeClass(\"irs-disabled\");\n },\n\n /**\n * Remove slider instance\n * and unbind all events\n */\n remove: function () {\n this.$cache.cont.remove();\n this.$cache.cont = null;\n\n this.$cache.line.off(\"keydown.irs_\" + this.plugin_count);\n\n this.$cache.body.off(\"touchmove.irs_\" + this.plugin_count);\n this.$cache.body.off(\"mousemove.irs_\" + this.plugin_count);\n\n this.$cache.win.off(\"touchend.irs_\" + this.plugin_count);\n this.$cache.win.off(\"mouseup.irs_\" + this.plugin_count);\n\n if (is_old_ie) {\n this.$cache.body.off(\"mouseup.irs_\" + this.plugin_count);\n this.$cache.body.off(\"mouseleave.irs_\" + this.plugin_count);\n }\n\n this.$cache.grid_labels = [];\n this.coords.big = [];\n this.coords.big_w = [];\n this.coords.big_p = [];\n this.coords.big_x = [];\n\n cancelAnimationFrame(this.raf_id);\n },\n\n /**\n * bind all slider events\n */\n bindEvents: function () {\n if (this.no_diapason) {\n return;\n }\n\n this.$cache.body.on(\"touchmove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n this.$cache.body.on(\"mousemove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n\n this.$cache.win.on(\"touchend.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n this.$cache.win.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n\n this.$cache.line.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n this.$cache.line.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n this.$cache.line.on(\"focus.irs_\" + this.plugin_count, this.pointerFocus.bind(this));\n\n if (this.options.drag_interval && this.options.type === \"double\") {\n this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n } else {\n this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n }\n\n if (this.options.type === \"single\") {\n this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n this.$cache.s_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n this.$cache.shad_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n this.$cache.s_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n this.$cache.edge.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n this.$cache.shad_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n } else {\n this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n\n this.$cache.from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n this.$cache.s_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n this.$cache.to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n this.$cache.s_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n this.$cache.shad_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n this.$cache.shad_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n this.$cache.from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n this.$cache.s_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n this.$cache.to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n this.$cache.s_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n this.$cache.shad_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n this.$cache.shad_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n }\n\n if (this.options.keyboard) {\n this.$cache.line.on(\"keydown.irs_\" + this.plugin_count, this.key.bind(this, \"keyboard\"));\n }\n\n if (is_old_ie) {\n this.$cache.body.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n this.$cache.body.on(\"mouseleave.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n }\n },\n\n /**\n * Focus with tabIndex\n *\n * @param e {Object} event object\n */\n pointerFocus: function (e) {\n if (!this.target) {\n var x;\n var $handle;\n\n if (this.options.type === \"single\") {\n $handle = this.$cache.single;\n } else {\n $handle = this.$cache.from;\n }\n\n x = $handle.offset().left;\n x += ($handle.width() / 2) - 1;\n\n this.pointerClick(\"single\", {preventDefault: function () {}, pageX: x});\n }\n },\n\n /**\n * Mousemove or touchmove\n * only for handlers\n *\n * @param e {Object} event object\n */\n pointerMove: function (e) {\n if (!this.dragging) {\n return;\n }\n\n var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n this.coords.x_pointer = x - this.coords.x_gap;\n\n this.calc();\n },\n\n /**\n * Mouseup or touchend\n * only for handlers\n *\n * @param e {Object} event object\n */\n pointerUp: function (e) {\n if (this.current_plugin !== this.plugin_count) {\n return;\n }\n\n if (this.is_active) {\n this.is_active = false;\n } else {\n return;\n }\n\n this.$cache.cont.find(\".state_hover\").removeClass(\"state_hover\");\n\n this.force_redraw = true;\n\n if (is_old_ie) {\n $(\"*\").prop(\"unselectable\", false);\n }\n\n this.updateScene();\n this.restoreOriginalMinInterval();\n\n // callbacks call\n if ($.contains(this.$cache.cont[0], e.target) || this.dragging) {\n this.callOnFinish();\n }\n \n this.dragging = false;\n },\n\n /**\n * Mousedown or touchstart\n * only for handlers\n *\n * @param target {String|null}\n * @param e {Object} event object\n */\n pointerDown: function (target, e) {\n e.preventDefault();\n var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n if (e.button === 2) {\n return;\n }\n\n if (target === \"both\") {\n this.setTempMinInterval();\n }\n\n if (!target) {\n target = this.target || \"from\";\n }\n\n this.current_plugin = this.plugin_count;\n this.target = target;\n\n this.is_active = true;\n this.dragging = true;\n\n this.coords.x_gap = this.$cache.rs.offset().left;\n this.coords.x_pointer = x - this.coords.x_gap;\n\n this.calcPointerPercent();\n this.changeLevel(target);\n\n if (is_old_ie) {\n $(\"*\").prop(\"unselectable\", true);\n }\n\n this.$cache.line.trigger(\"focus\");\n\n this.updateScene();\n },\n\n /**\n * Mousedown or touchstart\n * for other slider elements, like diapason line\n *\n * @param target {String}\n * @param e {Object} event object\n */\n pointerClick: function (target, e) {\n e.preventDefault();\n var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n if (e.button === 2) {\n return;\n }\n\n this.current_plugin = this.plugin_count;\n this.target = target;\n\n this.is_click = true;\n this.coords.x_gap = this.$cache.rs.offset().left;\n this.coords.x_pointer = +(x - this.coords.x_gap).toFixed();\n\n this.force_redraw = true;\n this.calc();\n\n this.$cache.line.trigger(\"focus\");\n },\n\n /**\n * Keyborard controls for focused slider\n *\n * @param target {String}\n * @param e {Object} event object\n * @returns {boolean|undefined}\n */\n key: function (target, e) {\n if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n return;\n }\n\n switch (e.which) {\n case 83: // W\n case 65: // A\n case 40: // DOWN\n case 37: // LEFT\n e.preventDefault();\n this.moveByKey(false);\n break;\n\n case 87: // S\n case 68: // D\n case 38: // UP\n case 39: // RIGHT\n e.preventDefault();\n this.moveByKey(true);\n break;\n }\n\n return true;\n },\n\n /**\n * Move by key\n *\n * @param right {boolean} direction to move\n */\n moveByKey: function (right) {\n var p = this.coords.p_pointer;\n var p_step = (this.options.max - this.options.min) / 100;\n p_step = this.options.step / p_step;\n\n if (right) {\n p += p_step;\n } else {\n p -= p_step;\n }\n\n this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p);\n this.is_key = true;\n this.calc();\n },\n\n /**\n * Set visibility and content\n * of Min and Max labels\n */\n setMinMax: function () {\n if (!this.options) {\n return;\n }\n\n if (this.options.hide_min_max) {\n this.$cache.min[0].style.display = \"none\";\n this.$cache.max[0].style.display = \"none\";\n return;\n }\n\n if (this.options.values.length) {\n this.$cache.min.html(this.decorate(this.options.p_values[this.options.min]));\n this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));\n } else {\n var min_pretty = this._prettify(this.options.min);\n var max_pretty = this._prettify(this.options.max);\n\n this.result.min_pretty = min_pretty;\n this.result.max_pretty = max_pretty;\n\n this.$cache.min.html(this.decorate(min_pretty, this.options.min));\n this.$cache.max.html(this.decorate(max_pretty, this.options.max));\n }\n\n this.labels.w_min = this.$cache.min.outerWidth(false);\n this.labels.w_max = this.$cache.max.outerWidth(false);\n },\n\n /**\n * Then dragging interval, prevent interval collapsing\n * using min_interval option\n */\n setTempMinInterval: function () {\n var interval = this.result.to - this.result.from;\n\n if (this.old_min_interval === null) {\n this.old_min_interval = this.options.min_interval;\n }\n\n this.options.min_interval = interval;\n },\n\n /**\n * Restore min_interval option to original\n */\n restoreOriginalMinInterval: function () {\n if (this.old_min_interval !== null) {\n this.options.min_interval = this.old_min_interval;\n this.old_min_interval = null;\n }\n },\n\n\n\n // =============================================================================================================\n // Calculations\n\n /**\n * All calculations and measures start here\n *\n * @param update {boolean=}\n */\n calc: function (update) {\n if (!this.options) {\n return;\n }\n\n this.calc_count++;\n\n if (this.calc_count === 10 || update) {\n this.calc_count = 0;\n this.coords.w_rs = this.$cache.rs.outerWidth(false);\n\n this.calcHandlePercent();\n }\n\n if (!this.coords.w_rs) {\n return;\n }\n\n this.calcPointerPercent();\n var handle_x = this.getHandleX();\n\n\n if (this.target === \"both\") {\n this.coords.p_gap = 0;\n handle_x = this.getHandleX();\n }\n\n if (this.target === \"click\") {\n this.coords.p_gap = this.coords.p_handle / 2;\n handle_x = this.getHandleX();\n\n if (this.options.drag_interval) {\n this.target = \"both_one\";\n } else {\n this.target = this.chooseHandle(handle_x);\n }\n }\n\n switch (this.target) {\n case \"base\":\n var w = (this.options.max - this.options.min) / 100,\n f = (this.result.from - this.options.min) / w,\n t = (this.result.to - this.options.min) / w;\n\n this.coords.p_single_real = this.toFixed(f);\n this.coords.p_from_real = this.toFixed(f);\n this.coords.p_to_real = this.toFixed(t);\n\n this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n\n this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n this.target = null;\n\n break;\n\n case \"single\":\n if (this.options.from_fixed) {\n break;\n }\n\n this.coords.p_single_real = this.convertToRealPercent(handle_x);\n this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real);\n this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n\n this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n\n break;\n\n case \"from\":\n if (this.options.from_fixed) {\n break;\n }\n\n this.coords.p_from_real = this.convertToRealPercent(handle_x);\n this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n if (this.coords.p_from_real > this.coords.p_to_real) {\n this.coords.p_from_real = this.coords.p_to_real;\n }\n this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n\n this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n break;\n\n case \"to\":\n if (this.options.to_fixed) {\n break;\n }\n\n this.coords.p_to_real = this.convertToRealPercent(handle_x);\n this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n if (this.coords.p_to_real < this.coords.p_from_real) {\n this.coords.p_to_real = this.coords.p_from_real;\n }\n this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n\n this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n break;\n\n case \"both\":\n if (this.options.from_fixed || this.options.to_fixed) {\n break;\n }\n\n handle_x = this.toFixed(handle_x + (this.coords.p_handle * 0.001));\n\n this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left;\n this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right;\n this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n break;\n\n case \"both_one\":\n if (this.options.from_fixed || this.options.to_fixed) {\n break;\n }\n\n var real_x = this.convertToRealPercent(handle_x),\n from = this.result.from_percent,\n to = this.result.to_percent,\n full = to - from,\n half = full / 2,\n new_from = real_x - half,\n new_to = real_x + half;\n\n if (new_from < 0) {\n new_from = 0;\n new_to = new_from + full;\n }\n\n if (new_to > 100) {\n new_to = 100;\n new_from = new_to - full;\n }\n\n this.coords.p_from_real = this.calcWithStep(new_from);\n this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n this.coords.p_to_real = this.calcWithStep(new_to);\n this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n break;\n }\n\n if (this.options.type === \"single\") {\n this.coords.p_bar_x = (this.coords.p_handle / 2);\n this.coords.p_bar_w = this.coords.p_single_fake;\n\n this.result.from_percent = this.coords.p_single_real;\n this.result.from = this.convertToValue(this.coords.p_single_real);\n this.result.from_pretty = this._prettify(this.result.from);\n\n if (this.options.values.length) {\n this.result.from_value = this.options.values[this.result.from];\n }\n } else {\n this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + (this.coords.p_handle / 2));\n this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake);\n\n this.result.from_percent = this.coords.p_from_real;\n this.result.from = this.convertToValue(this.coords.p_from_real);\n this.result.from_pretty = this._prettify(this.result.from);\n this.result.to_percent = this.coords.p_to_real;\n this.result.to = this.convertToValue(this.coords.p_to_real);\n this.result.to_pretty = this._prettify(this.result.to);\n\n if (this.options.values.length) {\n this.result.from_value = this.options.values[this.result.from];\n this.result.to_value = this.options.values[this.result.to];\n }\n }\n\n this.calcMinMax();\n this.calcLabels();\n },\n\n\n /**\n * calculates pointer X in percent\n */\n calcPointerPercent: function () {\n if (!this.coords.w_rs) {\n this.coords.p_pointer = 0;\n return;\n }\n\n if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer) ) {\n this.coords.x_pointer = 0;\n } else if (this.coords.x_pointer > this.coords.w_rs) {\n this.coords.x_pointer = this.coords.w_rs;\n }\n\n this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100);\n },\n\n convertToRealPercent: function (fake) {\n var full = 100 - this.coords.p_handle;\n return fake / full * 100;\n },\n\n convertToFakePercent: function (real) {\n var full = 100 - this.coords.p_handle;\n return real / 100 * full;\n },\n\n getHandleX: function () {\n var max = 100 - this.coords.p_handle,\n x = this.toFixed(this.coords.p_pointer - this.coords.p_gap);\n\n if (x < 0) {\n x = 0;\n } else if (x > max) {\n x = max;\n }\n\n return x;\n },\n\n calcHandlePercent: function () {\n if (this.options.type === \"single\") {\n this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n } else {\n this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n }\n\n this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n },\n\n /**\n * Find closest handle to pointer click\n *\n * @param real_x {Number}\n * @returns {String}\n */\n chooseHandle: function (real_x) {\n if (this.options.type === \"single\") {\n return \"single\";\n } else {\n var m_point = this.coords.p_from_real + ((this.coords.p_to_real - this.coords.p_from_real) / 2);\n if (real_x >= m_point) {\n return this.options.to_fixed ? \"from\" : \"to\";\n } else {\n return this.options.from_fixed ? \"to\" : \"from\";\n }\n }\n },\n\n /**\n * Measure Min and Max labels width in percent\n */\n calcMinMax: function () {\n if (!this.coords.w_rs) {\n return;\n }\n\n this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100;\n this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100;\n },\n\n /**\n * Measure labels width and X in percent\n */\n calcLabels: function () {\n if (!this.coords.w_rs || this.options.hide_from_to) {\n return;\n }\n\n if (this.options.type === \"single\") {\n\n this.labels.w_single = this.$cache.single.outerWidth(false);\n this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n this.labels.p_single_left = this.coords.p_single_fake + (this.coords.p_handle / 2) - (this.labels.p_single_fake / 2);\n this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n\n } else {\n\n this.labels.w_from = this.$cache.from.outerWidth(false);\n this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100;\n this.labels.p_from_left = this.coords.p_from_fake + (this.coords.p_handle / 2) - (this.labels.p_from_fake / 2);\n this.labels.p_from_left = this.toFixed(this.labels.p_from_left);\n this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake);\n\n this.labels.w_to = this.$cache.to.outerWidth(false);\n this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100;\n this.labels.p_to_left = this.coords.p_to_fake + (this.coords.p_handle / 2) - (this.labels.p_to_fake / 2);\n this.labels.p_to_left = this.toFixed(this.labels.p_to_left);\n this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake);\n\n this.labels.w_single = this.$cache.single.outerWidth(false);\n this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n this.labels.p_single_left = ((this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2) - (this.labels.p_single_fake / 2);\n this.labels.p_single_left = this.toFixed(this.labels.p_single_left);\n this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n\n }\n },\n\n\n\n // =============================================================================================================\n // Drawings\n\n /**\n * Main function called in request animation frame\n * to update everything\n */\n updateScene: function () {\n if (this.raf_id) {\n cancelAnimationFrame(this.raf_id);\n this.raf_id = null;\n }\n\n clearTimeout(this.update_tm);\n this.update_tm = null;\n\n if (!this.options) {\n return;\n }\n\n this.drawHandles();\n\n if (this.is_active) {\n this.raf_id = requestAnimationFrame(this.updateScene.bind(this));\n } else {\n this.update_tm = setTimeout(this.updateScene.bind(this), 300);\n }\n },\n\n /**\n * Draw handles\n */\n drawHandles: function () {\n this.coords.w_rs = this.$cache.rs.outerWidth(false);\n\n if (!this.coords.w_rs) {\n return;\n }\n\n if (this.coords.w_rs !== this.coords.w_rs_old) {\n this.target = \"base\";\n this.is_resize = true;\n }\n\n if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) {\n this.setMinMax();\n this.calc(true);\n this.drawLabels();\n if (this.options.grid) {\n this.calcGridMargin();\n this.calcGridLabels();\n }\n this.force_redraw = true;\n this.coords.w_rs_old = this.coords.w_rs;\n this.drawShadow();\n }\n\n if (!this.coords.w_rs) {\n return;\n }\n\n if (!this.dragging && !this.force_redraw && !this.is_key) {\n return;\n }\n\n if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) {\n\n this.drawLabels();\n\n this.$cache.bar[0].style.left = this.coords.p_bar_x + \"%\";\n this.$cache.bar[0].style.width = this.coords.p_bar_w + \"%\";\n\n if (this.options.type === \"single\") {\n this.$cache.bar[0].style.left = 0;\n this.$cache.bar[0].style.width = this.coords.p_bar_w + this.coords.p_bar_x + \"%\";\n\n this.$cache.s_single[0].style.left = this.coords.p_single_fake + \"%\";\n\n this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n } else {\n this.$cache.s_from[0].style.left = this.coords.p_from_fake + \"%\";\n this.$cache.s_to[0].style.left = this.coords.p_to_fake + \"%\";\n\n if (this.old_from !== this.result.from || this.force_redraw) {\n this.$cache.from[0].style.left = this.labels.p_from_left + \"%\";\n }\n if (this.old_to !== this.result.to || this.force_redraw) {\n this.$cache.to[0].style.left = this.labels.p_to_left + \"%\";\n }\n\n this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n }\n\n this.writeToInput();\n\n if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) {\n this.$cache.input.trigger(\"change\");\n this.$cache.input.trigger(\"input\");\n }\n\n this.old_from = this.result.from;\n this.old_to = this.result.to;\n\n // callbacks call\n if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) {\n this.callOnChange();\n }\n if (this.is_key || this.is_click) {\n this.is_key = false;\n this.is_click = false;\n this.callOnFinish();\n }\n\n this.is_update = false;\n this.is_resize = false;\n this.is_finish = false;\n }\n\n this.is_start = false;\n this.is_key = false;\n this.is_click = false;\n this.force_redraw = false;\n },\n\n /**\n * Draw labels\n * measure labels collisions\n * collapse close labels\n */\n drawLabels: function () {\n if (!this.options) {\n return;\n }\n\n var values_num = this.options.values.length;\n var p_values = this.options.p_values;\n var text_single;\n var text_from;\n var text_to;\n var from_pretty;\n var to_pretty;\n\n if (this.options.hide_from_to) {\n return;\n }\n\n if (this.options.type === \"single\") {\n\n if (values_num) {\n text_single = this.decorate(p_values[this.result.from]);\n this.$cache.single.html(text_single);\n } else {\n from_pretty = this._prettify(this.result.from);\n\n text_single = this.decorate(from_pretty, this.result.from);\n this.$cache.single.html(text_single);\n }\n\n this.calcLabels();\n\n if (this.labels.p_single_left < this.labels.p_min + 1) {\n this.$cache.min[0].style.visibility = \"hidden\";\n } else {\n this.$cache.min[0].style.visibility = \"visible\";\n }\n\n if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) {\n this.$cache.max[0].style.visibility = \"hidden\";\n } else {\n this.$cache.max[0].style.visibility = \"visible\";\n }\n\n } else {\n\n if (values_num) {\n\n if (this.options.decorate_both) {\n text_single = this.decorate(p_values[this.result.from]);\n text_single += this.options.values_separator;\n text_single += this.decorate(p_values[this.result.to]);\n } else {\n text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]);\n }\n text_from = this.decorate(p_values[this.result.from]);\n text_to = this.decorate(p_values[this.result.to]);\n\n this.$cache.single.html(text_single);\n this.$cache.from.html(text_from);\n this.$cache.to.html(text_to);\n\n } else {\n from_pretty = this._prettify(this.result.from);\n to_pretty = this._prettify(this.result.to);\n\n if (this.options.decorate_both) {\n text_single = this.decorate(from_pretty, this.result.from);\n text_single += this.options.values_separator;\n text_single += this.decorate(to_pretty, this.result.to);\n } else {\n text_single = this.decorate(from_pretty + this.options.values_separator + to_pretty, this.result.to);\n }\n text_from = this.decorate(from_pretty, this.result.from);\n text_to = this.decorate(to_pretty, this.result.to);\n\n this.$cache.single.html(text_single);\n this.$cache.from.html(text_from);\n this.$cache.to.html(text_to);\n\n }\n\n this.calcLabels();\n\n var min = Math.min(this.labels.p_single_left, this.labels.p_from_left),\n single_left = this.labels.p_single_left + this.labels.p_single_fake,\n to_left = this.labels.p_to_left + this.labels.p_to_fake,\n max = Math.max(single_left, to_left);\n\n if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) {\n this.$cache.from[0].style.visibility = \"visible\";\n this.$cache.to[0].style.visibility = \"visible\";\n this.$cache.single[0].style.visibility = \"hidden\";\n\n if (this.result.from === this.result.to) {\n if (this.target === \"from\") {\n this.$cache.from[0].style.visibility = \"visible\";\n } else if (this.target === \"to\") {\n this.$cache.to[0].style.visibility = \"visible\";\n } else if (!this.target) {\n this.$cache.from[0].style.visibility = \"visible\";\n }\n this.$cache.single[0].style.visibility = \"hidden\";\n max = to_left;\n } else {\n this.$cache.from[0].style.visibility = \"visible\";\n this.$cache.to[0].style.visibility = \"visible\";\n this.$cache.single[0].style.visibility = \"hidden\";\n max = Math.max(single_left, to_left);\n }\n if (!$(this.$cache.to[0]).hasClass('too-close'))\n $(this.$cache.to[0]).addClass('too-close');\n } else {\n this.$cache.from[0].style.visibility = \"visible\";\n this.$cache.to[0].style.visibility = \"visible\";\n this.$cache.single[0].style.visibility = \"hidden\";\n if ($(this.$cache.to[0]).hasClass('too-close'))\n $(this.$cache.to[0]).removeClass('too-close');\n }\n\n if (min < this.labels.p_min + 1) {\n this.$cache.min[0].style.visibility = \"hidden\";\n } else {\n this.$cache.min[0].style.visibility = \"visible\";\n }\n\n if (max > 100 - this.labels.p_max - 1) {\n this.$cache.max[0].style.visibility = \"hidden\";\n } else {\n this.$cache.max[0].style.visibility = \"visible\";\n }\n\n }\n },\n\n /**\n * Draw shadow intervals\n */\n drawShadow: function () {\n var o = this.options,\n c = this.$cache,\n\n is_from_min = typeof o.from_min === \"number\" && !isNaN(o.from_min),\n is_from_max = typeof o.from_max === \"number\" && !isNaN(o.from_max),\n is_to_min = typeof o.to_min === \"number\" && !isNaN(o.to_min),\n is_to_max = typeof o.to_max === \"number\" && !isNaN(o.to_max),\n\n from_min,\n from_max,\n to_min,\n to_max;\n\n if (o.type === \"single\") {\n if (o.from_shadow && (is_from_min || is_from_max)) {\n from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min));\n from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max));\n from_min = from_min + (this.coords.p_handle / 2);\n\n c.shad_single[0].style.display = \"block\";\n c.shad_single[0].style.left = from_min + \"%\";\n c.shad_single[0].style.width = from_max + \"%\";\n } else {\n c.shad_single[0].style.display = \"none\";\n }\n } else {\n if (o.from_shadow && (is_from_min || is_from_max)) {\n from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min));\n from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max));\n from_min = from_min + (this.coords.p_handle / 2);\n\n c.shad_from[0].style.display = \"block\";\n c.shad_from[0].style.left = from_min + \"%\";\n c.shad_from[0].style.width = from_max + \"%\";\n } else {\n c.shad_from[0].style.display = \"none\";\n }\n\n if (o.to_shadow && (is_to_min || is_to_max)) {\n to_min = this.convertToPercent(is_to_min ? o.to_min : o.min);\n to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min;\n to_min = this.toFixed(to_min - (this.coords.p_handle / 100 * to_min));\n to_max = this.toFixed(to_max - (this.coords.p_handle / 100 * to_max));\n to_min = to_min + (this.coords.p_handle / 2);\n\n c.shad_to[0].style.display = \"block\";\n c.shad_to[0].style.left = to_min + \"%\";\n c.shad_to[0].style.width = to_max + \"%\";\n } else {\n c.shad_to[0].style.display = \"none\";\n }\n }\n },\n\n\n\n /**\n * Write values to input element\n */\n writeToInput: function () {\n if (this.options.type === \"single\") {\n if (this.options.values.length) {\n this.$cache.input.prop(\"value\", this.result.from_value);\n } else {\n this.$cache.input.prop(\"value\", this.result.from);\n }\n this.$cache.input.data(\"from\", this.result.from);\n } else {\n if (this.options.values.length) {\n this.$cache.input.prop(\"value\", this.result.from_value + this.options.input_values_separator + this.result.to_value);\n } else {\n this.$cache.input.prop(\"value\", this.result.from + this.options.input_values_separator + this.result.to);\n }\n this.$cache.input.data(\"from\", this.result.from);\n this.$cache.input.data(\"to\", this.result.to);\n }\n },\n\n\n\n // =============================================================================================================\n // Callbacks\n\n callOnStart: function () {\n this.writeToInput();\n\n if (this.options.onStart && typeof this.options.onStart === \"function\") {\n if (this.options.scope) {\n this.options.onStart.call(this.options.scope, this.result);\n } else {\n this.options.onStart(this.result);\n }\n }\n },\n callOnChange: function () {\n this.writeToInput();\n\n if (this.options.onChange && typeof this.options.onChange === \"function\") {\n if (this.options.scope) {\n this.options.onChange.call(this.options.scope, this.result);\n } else {\n this.options.onChange(this.result);\n }\n }\n },\n callOnFinish: function () {\n this.writeToInput();\n\n if (this.options.onFinish && typeof this.options.onFinish === \"function\") {\n if (this.options.scope) {\n this.options.onFinish.call(this.options.scope, this.result);\n } else {\n this.options.onFinish(this.result);\n }\n }\n },\n callOnUpdate: function () {\n this.writeToInput();\n\n if (this.options.onUpdate && typeof this.options.onUpdate === \"function\") {\n if (this.options.scope) {\n this.options.onUpdate.call(this.options.scope, this.result);\n } else {\n this.options.onUpdate(this.result);\n }\n }\n },\n\n\n\n\n // =============================================================================================================\n // Service methods\n\n toggleInput: function () {\n this.$cache.input.toggleClass(\"irs-hidden-input\");\n\n if (this.has_tab_index) {\n this.$cache.input.prop(\"tabindex\", -1);\n } else {\n this.$cache.input.removeProp(\"tabindex\");\n }\n\n this.has_tab_index = !this.has_tab_index;\n },\n\n /**\n * Convert real value to percent\n *\n * @param value {Number} X in real\n * @param no_min {boolean=} don't use min value\n * @returns {Number} X in percent\n */\n convertToPercent: function (value, no_min) {\n var diapason = this.options.max - this.options.min,\n one_percent = diapason / 100,\n val, percent;\n\n if (!diapason) {\n this.no_diapason = true;\n return 0;\n }\n\n if (no_min) {\n val = value;\n } else {\n val = value - this.options.min;\n }\n\n percent = val / one_percent;\n\n return this.toFixed(percent);\n },\n\n /**\n * Convert percent to real values\n *\n * @param percent {Number} X in percent\n * @returns {Number} X in real\n */\n convertToValue: function (percent) {\n var min = this.options.min,\n max = this.options.max,\n min_decimals = min.toString().split(\".\")[1],\n max_decimals = max.toString().split(\".\")[1],\n min_length, max_length,\n avg_decimals = 0,\n abs = 0;\n\n if (percent === 0) {\n return this.options.min;\n }\n if (percent === 100) {\n return this.options.max;\n }\n\n\n if (min_decimals) {\n min_length = min_decimals.length;\n avg_decimals = min_length;\n }\n if (max_decimals) {\n max_length = max_decimals.length;\n avg_decimals = max_length;\n }\n if (min_length && max_length) {\n avg_decimals = (min_length >= max_length) ? min_length : max_length;\n }\n\n if (min < 0) {\n abs = Math.abs(min);\n min = +(min + abs).toFixed(avg_decimals);\n max = +(max + abs).toFixed(avg_decimals);\n }\n\n var number = ((max - min) / 100 * percent) + min,\n string = this.options.step.toString().split(\".\")[1],\n result;\n\n if (string) {\n number = +number.toFixed(string.length);\n } else {\n number = number / this.options.step;\n number = number * this.options.step;\n\n number = +number.toFixed(0);\n }\n\n if (abs) {\n number -= abs;\n }\n\n if (string) {\n result = +number.toFixed(string.length);\n } else {\n result = this.toFixed(number);\n }\n\n if (result < this.options.min) {\n result = this.options.min;\n } else if (result > this.options.max) {\n result = this.options.max;\n }\n\n return result;\n },\n\n /**\n * Round percent value with step\n *\n * @param percent {Number}\n * @returns percent {Number} rounded\n */\n calcWithStep: function (percent) {\n var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step;\n\n if (rounded > 100) {\n rounded = 100;\n }\n if (percent === 100) {\n rounded = 100;\n }\n\n return this.toFixed(rounded);\n },\n\n checkMinInterval: function (p_current, p_next, type) {\n var o = this.options,\n current,\n next;\n\n if (!o.min_interval) {\n return p_current;\n }\n\n current = this.convertToValue(p_current);\n next = this.convertToValue(p_next);\n\n if (type === \"from\") {\n\n if (next - current < o.min_interval) {\n current = next - o.min_interval;\n }\n\n } else {\n\n if (current - next < o.min_interval) {\n current = next + o.min_interval;\n }\n\n }\n\n return this.convertToPercent(current);\n },\n\n checkMaxInterval: function (p_current, p_next, type) {\n var o = this.options,\n current,\n next;\n\n if (!o.max_interval) {\n return p_current;\n }\n\n current = this.convertToValue(p_current);\n next = this.convertToValue(p_next);\n\n if (type === \"from\") {\n\n if (next - current > o.max_interval) {\n current = next - o.max_interval;\n }\n\n } else {\n\n if (current - next > o.max_interval) {\n current = next + o.max_interval;\n }\n\n }\n\n return this.convertToPercent(current);\n },\n\n checkDiapason: function (p_num, min, max) {\n var num = this.convertToValue(p_num),\n o = this.options;\n\n if (typeof min !== \"number\") {\n min = o.min;\n }\n\n if (typeof max !== \"number\") {\n max = o.max;\n }\n\n if (num < min) {\n num = min;\n }\n\n if (num > max) {\n num = max;\n }\n\n return this.convertToPercent(num);\n },\n\n toFixed: function (num) {\n num = num.toFixed(20);\n return +num;\n },\n\n _prettify: function (num) {\n if (!this.options.prettify_enabled) {\n return num;\n }\n\n if (this.options.prettify && typeof this.options.prettify === \"function\") {\n return this.options.prettify(num);\n } else {\n return this.prettify(num);\n }\n },\n\n prettify: function (num) {\n var n = num.toString();\n return n.replace(/(\\d{1,3}(?=(?:\\d\\d\\d)+(?!\\d)))/g, \"$1\" + this.options.prettify_separator);\n },\n\n checkEdges: function (left, width) {\n if (!this.options.force_edges) {\n return this.toFixed(left);\n }\n\n if (left < 0) {\n left = 0;\n } else if (left > 100 - width) {\n left = 100 - width;\n }\n\n return this.toFixed(left);\n },\n\n validate: function () {\n var o = this.options,\n r = this.result,\n v = o.values,\n vl = v.length,\n value,\n i;\n\n if (typeof o.min === \"string\") o.min = +o.min;\n if (typeof o.max === \"string\") o.max = +o.max;\n if (typeof o.from === \"string\") o.from = +o.from;\n if (typeof o.to === \"string\") o.to = +o.to;\n if (typeof o.step === \"string\") o.step = +o.step;\n\n if (typeof o.from_min === \"string\") o.from_min = +o.from_min;\n if (typeof o.from_max === \"string\") o.from_max = +o.from_max;\n if (typeof o.to_min === \"string\") o.to_min = +o.to_min;\n if (typeof o.to_max === \"string\") o.to_max = +o.to_max;\n\n if (typeof o.grid_num === \"string\") o.grid_num = +o.grid_num;\n\n if (o.max < o.min) {\n o.max = o.min;\n }\n\n if (vl) {\n o.p_values = [];\n o.min = 0;\n o.max = vl - 1;\n o.step = 1;\n o.grid_num = o.max;\n o.grid_snap = true;\n\n for (i = 0; i < vl; i++) {\n value = +v[i];\n\n if (!isNaN(value)) {\n v[i] = value;\n value = this._prettify(value);\n } else {\n value = v[i];\n }\n\n o.p_values.push(value);\n }\n }\n\n if (typeof o.from !== \"number\" || isNaN(o.from)) {\n o.from = o.min;\n }\n\n if (typeof o.to !== \"number\" || isNaN(o.to)) {\n o.to = o.max;\n }\n\n if (o.type === \"single\") {\n\n if (o.from < o.min) o.from = o.min;\n if (o.from > o.max) o.from = o.max;\n\n } else {\n\n if (o.from < o.min) o.from = o.min;\n if (o.from > o.max) o.from = o.max;\n\n if (o.to < o.min) o.to = o.min;\n if (o.to > o.max) o.to = o.max;\n\n if (this.update_check.from) {\n\n if (this.update_check.from !== o.from) {\n if (o.from > o.to) o.from = o.to;\n }\n if (this.update_check.to !== o.to) {\n if (o.to < o.from) o.to = o.from;\n }\n\n }\n\n if (o.from > o.to) o.from = o.to;\n if (o.to < o.from) o.to = o.from;\n\n }\n\n if (typeof o.step !== \"number\" || isNaN(o.step) || !o.step || o.step < 0) {\n o.step = 1;\n }\n\n if (typeof o.from_min === \"number\" && o.from < o.from_min) {\n o.from = o.from_min;\n }\n\n if (typeof o.from_max === \"number\" && o.from > o.from_max) {\n o.from = o.from_max;\n }\n\n if (typeof o.to_min === \"number\" && o.to < o.to_min) {\n o.to = o.to_min;\n }\n\n if (typeof o.to_max === \"number\" && o.from > o.to_max) {\n o.to = o.to_max;\n }\n\n if (r) {\n if (r.min !== o.min) {\n r.min = o.min;\n }\n\n if (r.max !== o.max) {\n r.max = o.max;\n }\n\n if (r.from < r.min || r.from > r.max) {\n r.from = o.from;\n }\n\n if (r.to < r.min || r.to > r.max) {\n r.to = o.to;\n }\n }\n\n if (typeof o.min_interval !== \"number\" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) {\n o.min_interval = 0;\n }\n\n if (typeof o.max_interval !== \"number\" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) {\n o.max_interval = 0;\n }\n\n if (o.min_interval && o.min_interval > o.max - o.min) {\n o.min_interval = o.max - o.min;\n }\n\n if (o.max_interval && o.max_interval > o.max - o.min) {\n o.max_interval = o.max - o.min;\n }\n },\n\n decorate: function (num, original) {\n var decorated = \"\",\n o = this.options;\n\n if (o.prefix) {\n decorated += o.prefix;\n }\n\n decorated += num;\n\n if (o.max_postfix) {\n if (o.values.length && num === o.p_values[o.max]) {\n decorated += o.max_postfix;\n if (o.postfix) {\n decorated += \" \";\n }\n } else if (original === o.max) {\n decorated += o.max_postfix;\n if (o.postfix) {\n decorated += \" \";\n }\n }\n }\n\n if (o.postfix) {\n decorated += o.postfix;\n }\n\n return decorated;\n },\n\n updateFrom: function () {\n this.result.from = this.options.from;\n this.result.from_percent = this.convertToPercent(this.result.from);\n this.result.from_pretty = this._prettify(this.result.from);\n if (this.options.values) {\n this.result.from_value = this.options.values[this.result.from];\n }\n },\n\n updateTo: function () {\n this.result.to = this.options.to;\n this.result.to_percent = this.convertToPercent(this.result.to);\n this.result.to_pretty = this._prettify(this.result.to);\n if (this.options.values) {\n this.result.to_value = this.options.values[this.result.to];\n }\n },\n\n updateResult: function () {\n this.result.min = this.options.min;\n this.result.max = this.options.max;\n this.updateFrom();\n this.updateTo();\n },\n\n\n // =============================================================================================================\n // Grid\n\n appendGrid: function () {\n if (!this.options.grid) {\n return;\n }\n\n var o = this.options,\n i, z,\n\n total = o.max - o.min,\n big_num = o.grid_num,\n big_p = 0,\n big_w = 0,\n\n small_max = 4,\n local_small_max,\n small_p,\n small_w = 0,\n\n result,\n html = '';\n\n\n\n this.calcGridMargin();\n\n if (o.grid_snap) {\n big_num = total / o.step;\n }\n\n if (big_num > 50) big_num = 50;\n big_p = this.toFixed(100 / big_num);\n\n if (big_num > 4) {\n small_max = 3;\n }\n if (big_num > 7) {\n small_max = 2;\n }\n if (big_num > 14) {\n small_max = 1;\n }\n if (big_num > 28) {\n small_max = 0;\n }\n\n for (i = 0; i < big_num + 1; i++) {\n local_small_max = small_max;\n\n big_w = this.toFixed(big_p * i);\n\n if (big_w > 100) {\n big_w = 100;\n }\n this.coords.big[i] = big_w;\n\n small_p = (big_w - (big_p * (i - 1))) / (local_small_max + 1);\n\n for (z = 1; z <= local_small_max; z++) {\n if (big_w === 0) {\n break;\n }\n\n small_w = this.toFixed(big_w - (small_p * z));\n\n html += '';\n }\n\n html += '';\n\n result = this.convertToValue(big_w);\n if (o.values.length) {\n result = o.p_values[result];\n } else {\n result = this._prettify(result);\n }\n\n html += '' + result + '';\n }\n this.coords.big_num = Math.ceil(big_num + 1);\n\n\n\n this.$cache.cont.addClass(\"irs-with-grid\");\n this.$cache.grid.html(html);\n this.cacheGridLabels();\n },\n\n cacheGridLabels: function () {\n var $label, i,\n num = this.coords.big_num;\n\n for (i = 0; i < num; i++) {\n $label = this.$cache.grid.find(\".js-grid-text-\" + i);\n this.$cache.grid_labels.push($label);\n }\n\n this.calcGridLabels();\n },\n\n calcGridLabels: function () {\n var i, label, start = [], finish = [],\n num = this.coords.big_num;\n\n for (i = 0; i < num; i++) {\n this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false);\n this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100);\n this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2);\n\n start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]);\n finish[i] = this.toFixed(start[i] + this.coords.big_p[i]);\n }\n\n if (this.options.force_edges) {\n if (start[0] < -this.coords.grid_gap) {\n start[0] = -this.coords.grid_gap;\n finish[0] = this.toFixed(start[0] + this.coords.big_p[0]);\n\n this.coords.big_x[0] = this.coords.grid_gap;\n }\n\n if (finish[num - 1] > 100 + this.coords.grid_gap) {\n finish[num - 1] = 100 + this.coords.grid_gap;\n start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]);\n\n this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap);\n }\n }\n\n this.calcGridCollision(2, start, finish);\n this.calcGridCollision(4, start, finish);\n\n for (i = 0; i < num; i++) {\n label = this.$cache.grid_labels[i][0];\n\n if (this.coords.big_x[i] !== Number.POSITIVE_INFINITY) {\n label.style.marginLeft = -this.coords.big_x[i] + \"%\";\n }\n }\n },\n\n // Collisions Calc Beta\n // TODO: Refactor then have plenty of time\n calcGridCollision: function (step, start, finish) {\n var i, next_i, label,\n num = this.coords.big_num;\n\n for (i = 0; i < num; i += step) {\n next_i = i + (step / 2);\n if (next_i >= num) {\n break;\n }\n\n label = this.$cache.grid_labels[next_i][0];\n\n if (finish[i] <= start[next_i]) {\n label.style.visibility = \"visible\";\n } else {\n label.style.visibility = \"hidden\";\n }\n }\n },\n\n calcGridMargin: function () {\n if (!this.options.grid_margin) {\n return;\n }\n\n this.coords.w_rs = this.$cache.rs.outerWidth(false);\n if (!this.coords.w_rs) {\n return;\n }\n\n if (this.options.type === \"single\") {\n this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n } else {\n this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n }\n this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n this.coords.grid_gap = this.toFixed((this.coords.p_handle / 2) - 0.1);\n\n this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + \"%\";\n this.$cache.grid[0].style.left = this.coords.grid_gap + \"%\";\n },\n\n\n\n // =============================================================================================================\n // Public methods\n\n update: function (options) {\n if (!this.input) {\n return;\n }\n\n this.is_update = true;\n\n this.options.from = this.result.from;\n this.options.to = this.result.to;\n this.update_check.from = this.result.from;\n this.update_check.to = this.result.to;\n\n this.options = $.extend(this.options, options);\n this.validate();\n this.updateResult(options);\n\n this.toggleInput();\n this.remove();\n this.init(true);\n },\n\n reset: function () {\n if (!this.input) {\n return;\n }\n\n this.updateResult();\n this.update();\n },\n\n destroy: function () {\n if (!this.input) {\n return;\n }\n\n this.toggleInput();\n this.$cache.input.prop(\"readonly\", false);\n $.data(this.input, \"ionRangeSlider\", null);\n\n this.remove();\n this.input = null;\n this.options = null;\n }\n };\n\n $.fn.ionRangeSlider = function (options) {\n return this.each(function() {\n if (!$.data(this, \"ionRangeSlider\")) {\n $.data(this, \"ionRangeSlider\", new IonRangeSlider(this, options, plugin_count++));\n }\n });\n };\n\n\n\n // =================================================================================================================\n // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n // MIT license\n\n (function() {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']\n || window[vendors[x]+'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function(callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function() { callback(currTime + timeToCall); },\n timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n }());\n\n}));\n","/**\n * sticky-sidebar - A JavaScript plugin for making smart and high performance.\n * @version v3.3.1\n * @link https://github.com/abouolia/sticky-sidebar\n * @author Ahmed Bouhuolia\n * @license The MIT License (MIT)\n**/\n!function (t, e) { \"object\" == typeof exports && \"undefined\" != typeof module ? e(exports) : \"function\" == typeof define && define.amd ? define([\"exports\"], e) : e(t.StickySidebar = {}) }(this, function (t) { \"use strict\"; \"undefined\" != typeof window ? window : \"undefined\" != typeof global ? global : \"undefined\" != typeof self && self; var e, i, n = (function (t, e) { (function (t) { Object.defineProperty(t, \"__esModule\", { value: !0 }); var l, n, e = function () { function n(t, e) { for (var i = 0; i < e.length; i++) { var n = e[i]; n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n) } } return function (t, e, i) { return e && n(t.prototype, e), i && n(t, i), t } }(), i = (l = \".stickySidebar\", n = { topSpacing: 0, bottomSpacing: 0, containerSelector: !1, innerWrapperSelector: \".inner-wrapper-sticky\", stickyClass: \"is-affixed\", resizeSensor: !0, minWidth: !1 }, function () { function c(t) { var e = this, i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}; if (function (t, e) { if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\") }(this, c), this.options = c.extend(n, i), this.sidebar = \"string\" == typeof t ? document.querySelector(t) : t, void 0 === this.sidebar) throw new Error(\"There is no specific sidebar element.\"); this.sidebarInner = !1, this.container = this.sidebar.parentElement, this.affixedType = \"STATIC\", this.direction = \"down\", this.support = { transform: !1, transform3d: !1 }, this._initialized = !1, this._reStyle = !1, this._breakpoint = !1, this.dimensions = { translateY: 0, maxTranslateY: 0, topSpacing: 0, lastTopSpacing: 0, bottomSpacing: 0, lastBottomSpacing: 0, sidebarHeight: 0, sidebarWidth: 0, containerTop: 0, containerHeight: 0, viewportHeight: 0, viewportTop: 0, lastViewportTop: 0 }, [\"handleEvent\"].forEach(function (t) { e[t] = e[t].bind(e) }), this.initialize() } return e(c, [{ key: \"initialize\", value: function () { var i = this; if (this._setSupportFeatures(), this.options.innerWrapperSelector && (this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector), null === this.sidebarInner && (this.sidebarInner = !1)), !this.sidebarInner) { var t = document.createElement(\"div\"); for (t.setAttribute(\"class\", \"inner-wrapper-sticky\"), this.sidebar.appendChild(t); this.sidebar.firstChild != t;)t.appendChild(this.sidebar.firstChild); this.sidebarInner = this.sidebar.querySelector(\".inner-wrapper-sticky\") } if (this.options.containerSelector) { var e = document.querySelectorAll(this.options.containerSelector); if ((e = Array.prototype.slice.call(e)).forEach(function (t, e) { t.contains(i.sidebar) && (i.container = t) }), !e.length) throw new Error(\"The container does not contains on the sidebar.\") } \"function\" != typeof this.options.topSpacing && (this.options.topSpacing = parseInt(this.options.topSpacing) || 0), \"function\" != typeof this.options.bottomSpacing && (this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0), this._widthBreakpoint(), this.calcDimensions(), this.stickyPosition(), this.bindEvents(), this._initialized = !0 } }, { key: \"bindEvents\", value: function () { window.addEventListener(\"resize\", this, { passive: !0, capture: !1 }), window.addEventListener(\"scroll\", this, { passive: !0, capture: !1 }), this.sidebar.addEventListener(\"update\" + l, this), this.options.resizeSensor && \"undefined\" != typeof ResizeSensor && (new ResizeSensor(this.sidebarInner, this.handleEvent), new ResizeSensor(this.container, this.handleEvent)) } }, { key: \"handleEvent\", value: function (t) { this.updateSticky(t) } }, { key: \"calcDimensions\", value: function () { if (!this._breakpoint) { var t = this.dimensions; t.containerTop = c.offsetRelative(this.container).top, t.containerHeight = this.container.clientHeight, t.containerBottom = t.containerTop + t.containerHeight, t.sidebarHeight = this.sidebarInner.offsetHeight, t.sidebarWidth = this.sidebarInner.offsetWidth, t.viewportHeight = window.innerHeight, t.maxTranslateY = t.containerHeight - t.sidebarHeight, this._calcDimensionsWithScroll() } } }, { key: \"_calcDimensionsWithScroll\", value: function () { var t = this.dimensions; t.sidebarLeft = c.offsetRelative(this.sidebar).left, t.viewportTop = document.documentElement.scrollTop || document.body.scrollTop, t.viewportBottom = t.viewportTop + t.viewportHeight, t.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft, t.topSpacing = this.options.topSpacing, t.bottomSpacing = this.options.bottomSpacing, \"function\" == typeof t.topSpacing && (t.topSpacing = parseInt(t.topSpacing(this.sidebar)) || 0), \"function\" == typeof t.bottomSpacing && (t.bottomSpacing = parseInt(t.bottomSpacing(this.sidebar)) || 0), \"VIEWPORT-TOP\" === this.affixedType ? t.topSpacing < t.lastTopSpacing && (t.translateY += t.lastTopSpacing - t.topSpacing, this._reStyle = !0) : \"VIEWPORT-BOTTOM\" === this.affixedType && t.bottomSpacing < t.lastBottomSpacing && (t.translateY += t.lastBottomSpacing - t.bottomSpacing, this._reStyle = !0), t.lastTopSpacing = t.topSpacing, t.lastBottomSpacing = t.bottomSpacing } }, { key: \"isSidebarFitsViewport\", value: function () { var t = this.dimensions, e = \"down\" === this.scrollDirection ? t.lastBottomSpacing : t.lastTopSpacing; return this.dimensions.sidebarHeight + e < this.dimensions.viewportHeight } }, { key: \"observeScrollDir\", value: function () { var t = this.dimensions; if (t.lastViewportTop !== t.viewportTop) { var e = \"down\" === this.direction ? Math.min : Math.max; t.viewportTop === e(t.viewportTop, t.lastViewportTop) && (this.direction = \"down\" === this.direction ? \"up\" : \"down\") } } }, { key: \"getAffixType\", value: function () { this._calcDimensionsWithScroll(); var t = this.dimensions, e = t.viewportTop + t.topSpacing, i = this.affixedType; return e <= t.containerTop || t.containerHeight <= t.sidebarHeight ? (t.translateY = 0, i = \"STATIC\") : i = \"up\" === this.direction ? this._getAffixTypeScrollingUp() : this._getAffixTypeScrollingDown(), t.translateY = Math.max(0, t.translateY), t.translateY = Math.min(t.containerHeight, t.translateY), t.translateY = Math.round(t.translateY), t.lastViewportTop = t.viewportTop, i } }, { key: \"_getAffixTypeScrollingDown\", value: function () { var t = this.dimensions, e = t.sidebarHeight + t.containerTop, i = t.viewportTop + t.topSpacing, n = t.viewportBottom - t.bottomSpacing, o = this.affixedType; return this.isSidebarFitsViewport() ? t.sidebarHeight + i >= t.containerBottom ? (t.translateY = t.containerBottom - e, o = \"CONTAINER-BOTTOM\") : i >= t.containerTop && (t.translateY = i - t.containerTop, o = \"VIEWPORT-TOP\") : t.containerBottom <= n ? (t.translateY = t.containerBottom - e, o = \"CONTAINER-BOTTOM\") : e + t.translateY <= n ? (t.translateY = n - e, o = \"VIEWPORT-BOTTOM\") : t.containerTop + t.translateY <= i && 0 !== t.translateY && t.maxTranslateY !== t.translateY && (o = \"VIEWPORT-UNBOTTOM\"), o } }, { key: \"_getAffixTypeScrollingUp\", value: function () { var t = this.dimensions, e = t.sidebarHeight + t.containerTop, i = t.viewportTop + t.topSpacing, n = t.viewportBottom - t.bottomSpacing, o = this.affixedType; return i <= t.translateY + t.containerTop ? (t.translateY = i - t.containerTop, o = \"VIEWPORT-TOP\") : t.containerBottom <= n ? (t.translateY = t.containerBottom - e, o = \"CONTAINER-BOTTOM\") : this.isSidebarFitsViewport() || t.containerTop <= i && 0 !== t.translateY && t.maxTranslateY !== t.translateY && (o = \"VIEWPORT-UNBOTTOM\"), o } }, { key: \"_getStyle\", value: function (t) { if (void 0 !== t) { var e = { inner: {}, outer: {} }, i = this.dimensions; switch (t) { case \"VIEWPORT-TOP\": e.inner = { position: \"fixed\", top: i.topSpacing, left: i.sidebarLeft - i.viewportLeft, width: i.sidebarWidth }; break; case \"VIEWPORT-BOTTOM\": e.inner = { position: \"fixed\", top: \"auto\", left: i.sidebarLeft, bottom: i.bottomSpacing, width: i.sidebarWidth }; break; case \"CONTAINER-BOTTOM\": case \"VIEWPORT-UNBOTTOM\": var n = this._getTranslate(0, i.translateY + \"px\"); e.inner = n ? { transform: n } : { position: \"absolute\", top: i.translateY, width: i.sidebarWidth } }switch (t) { case \"VIEWPORT-TOP\": case \"VIEWPORT-BOTTOM\": case \"VIEWPORT-UNBOTTOM\": case \"CONTAINER-BOTTOM\": e.outer = { height: i.sidebarHeight, position: \"relative\" } }return e.outer = c.extend({ height: \"\", position: \"\" }, e.outer), e.inner = c.extend({ position: \"relative\", top: \"\", left: \"\", bottom: \"\", width: \"\", transform: \"\" }, e.inner), e } } }, { key: \"stickyPosition\", value: function (t) { if (!this._breakpoint) { t = this._reStyle || t || !1, this.options.topSpacing, this.options.bottomSpacing; var e = this.getAffixType(), i = this._getStyle(e); if ((this.affixedType != e || t) && e) { var n = \"affix.\" + e.toLowerCase().replace(\"viewport-\", \"\") + l; for (var o in c.eventTrigger(this.sidebar, n), \"STATIC\" === e ? c.removeClass(this.sidebar, this.options.stickyClass) : c.addClass(this.sidebar, this.options.stickyClass), i.outer) { var s = \"number\" == typeof i.outer[o] ? \"px\" : \"\"; this.sidebar.style[o] = i.outer[o] + s } for (var r in i.inner) { var a = \"number\" == typeof i.inner[r] ? \"px\" : \"\"; this.sidebarInner.style[r] = i.inner[r] + a } var p = \"affixed.\" + e.toLowerCase().replace(\"viewport-\", \"\") + l; c.eventTrigger(this.sidebar, p) } else this._initialized && (this.sidebarInner.style.left = i.inner.left); this.affixedType = e } } }, { key: \"_widthBreakpoint\", value: function () { window.innerWidth <= this.options.minWidth ? (this._breakpoint = !0, this.affixedType = \"STATIC\", this.sidebar.removeAttribute(\"style\"), c.removeClass(this.sidebar, this.options.stickyClass), this.sidebarInner.removeAttribute(\"style\")) : this._breakpoint = !1 } }, { key: \"updateSticky\", value: function () { var t, e = this, i = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : {}; this._running || (this._running = !0, t = i.type, requestAnimationFrame(function () { switch (t) { case \"scroll\": e._calcDimensionsWithScroll(), e.observeScrollDir(), e.stickyPosition(); break; case \"resize\": default: e._widthBreakpoint(), e.calcDimensions(), e.stickyPosition(!0) }e._running = !1 })) } }, { key: \"_setSupportFeatures\", value: function () { var t = this.support; t.transform = c.supportTransform(), t.transform3d = c.supportTransform(!0) } }, { key: \"_getTranslate\", value: function () { var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0, e = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 0, i = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : 0; return this.support.transform3d ? \"translate3d(\" + t + \", \" + e + \", \" + i + \")\" : !!this.support.translate && \"translate(\" + t + \", \" + e + \")\" } }, { key: \"destroy\", value: function () { window.removeEventListener(\"resize\", this, { capture: !1 }), window.removeEventListener(\"scroll\", this, { capture: !1 }), this.sidebar.classList.remove(this.options.stickyClass), this.sidebar.style.minHeight = \"\", this.sidebar.removeEventListener(\"update\" + l, this); var t = { inner: {}, outer: {} }; for (var e in t.inner = { position: \"\", top: \"\", left: \"\", bottom: \"\", width: \"\", transform: \"\" }, t.outer = { height: \"\", position: \"\" }, t.outer) this.sidebar.style[e] = t.outer[e]; for (var i in t.inner) this.sidebarInner.style[i] = t.inner[i]; this.options.resizeSensor && \"undefined\" != typeof ResizeSensor && (ResizeSensor.detach(this.sidebarInner, this.handleEvent), ResizeSensor.detach(this.container, this.handleEvent)) } }], [{ key: \"supportTransform\", value: function (t) { var i = !1, e = t ? \"perspective\" : \"transform\", n = e.charAt(0).toUpperCase() + e.slice(1), o = document.createElement(\"support\").style; return (e + \" \" + [\"Webkit\", \"Moz\", \"O\", \"ms\"].join(n + \" \") + n).split(\" \").forEach(function (t, e) { if (void 0 !== o[t]) return i = t, !1 }), i } }, { key: \"eventTrigger\", value: function (t, e, i) { try { var n = new CustomEvent(e, { detail: i }) } catch (t) { (n = document.createEvent(\"CustomEvent\")).initCustomEvent(e, !0, !0, i) } t.dispatchEvent(n) } }, { key: \"extend\", value: function (t, e) { var i = {}; for (var n in t) void 0 !== e[n] ? i[n] = e[n] : i[n] = t[n]; return i } }, { key: \"offsetRelative\", value: function (t) { var e = { left: 0, top: 0 }; do { var i = t.offsetTop, n = t.offsetLeft; isNaN(i) || (e.top += i), isNaN(n) || (e.left += n), t = \"BODY\" === t.tagName ? t.parentElement : t.offsetParent } while (t); return e } }, { key: \"addClass\", value: function (t, e) { c.hasClass(t, e) || (t.classList ? t.classList.add(e) : t.className += \" \" + e) } }, { key: \"removeClass\", value: function (t, e) { c.hasClass(t, e) && (t.classList ? t.classList.remove(e) : t.className = t.className.replace(new RegExp(\"(^|\\\\b)\" + e.split(\" \").join(\"|\") + \"(\\\\b|$)\", \"gi\"), \" \")) } }, { key: \"hasClass\", value: function (t, e) { return t.classList ? t.classList.contains(e) : new RegExp(\"(^| )\" + e + \"( |$)\", \"gi\").test(t.className) } }, { key: \"defaults\", get: function () { return n } }]), c }()); t.default = i, window.StickySidebar = i })(e) }(e = { exports: {} }, e.exports), e.exports), o = (i = n) && i.__esModule && Object.prototype.hasOwnProperty.call(i, \"default\") ? i.default : i; t.default = o, t.__moduleExports = n, Object.defineProperty(t, \"__esModule\", { value: !0 }) });","'use strict';\n\n/**\n * Copyright Marc J. Schmidt. See the LICENSE file at the top-level\n * directory of this distribution and at\n * https://github.com/marcj/css-element-queries/blob/master/LICENSE.\n */\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.ResizeSensor = factory();\n }\n}(typeof window !== 'undefined' ? window : this, function () {\n\n // Make sure it does not throw in a SSR (Server Side Rendering) situation\n if (typeof window === \"undefined\") {\n return null;\n }\n // https://github.com/Semantic-Org/Semantic-UI/issues/3855\n // https://github.com/marcj/css-element-queries/issues/257\n var globalWindow = typeof window != 'undefined' && window.Math == Math\n ? window\n : typeof self != 'undefined' && self.Math == Math\n ? self\n : Function('return this')();\n // Only used for the dirty checking, so the event callback count is limited to max 1 call per fps per sensor.\n // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and\n // would generate too many unnecessary events.\n var requestAnimationFrame = globalWindow.requestAnimationFrame ||\n globalWindow.mozRequestAnimationFrame ||\n globalWindow.webkitRequestAnimationFrame ||\n function (fn) {\n return globalWindow.setTimeout(fn, 20);\n };\n\n /**\n * Iterate over each of the provided element(s).\n *\n * @param {HTMLElement|HTMLElement[]} elements\n * @param {Function} callback\n */\n function forEachElement(elements, callback){\n var elementsType = Object.prototype.toString.call(elements);\n var isCollectionTyped = ('[object Array]' === elementsType\n || ('[object NodeList]' === elementsType)\n || ('[object HTMLCollection]' === elementsType)\n || ('[object Object]' === elementsType)\n || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery\n || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools\n );\n var i = 0, j = elements.length;\n if (isCollectionTyped) {\n for (; i < j; i++) {\n callback(elements[i]);\n }\n } else {\n callback(elements);\n }\n }\n\n /**\n * Get element size\n * @param {HTMLElement} element\n * @returns {Object} {width, height}\n */\n function getElementSize(element) {\n if (!element.getBoundingClientRect) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n }\n\n var rect = element.getBoundingClientRect();\n return {\n width: Math.round(rect.width),\n height: Math.round(rect.height)\n }\n }\n\n /**\n * Apply CSS styles to element.\n *\n * @param {HTMLElement} element\n * @param {Object} style\n */\n function setStyle(element, style) {\n Object.keys(style).forEach(function(key) {\n element.style[key] = style[key];\n });\n }\n\n /**\n * Class for dimension change detection.\n *\n * @param {Element|Element[]|Elements|jQuery} element\n * @param {Function} callback\n *\n * @constructor\n */\n var ResizeSensor = function(element, callback) {\n var lastAnimationFrame = 0;\n \n /**\n *\n * @constructor\n */\n function EventQueue() {\n var q = [];\n this.add = function(ev) {\n q.push(ev);\n };\n\n var i, j;\n this.call = function(sizeInfo) {\n for (i = 0, j = q.length; i < j; i++) {\n q[i].call(this, sizeInfo);\n }\n };\n\n this.remove = function(ev) {\n var newQueue = [];\n for(i = 0, j = q.length; i < j; i++) {\n if(q[i] !== ev) newQueue.push(q[i]);\n }\n q = newQueue;\n };\n\n this.length = function() {\n return q.length;\n }\n }\n\n /**\n *\n * @param {HTMLElement} element\n * @param {Function} resized\n */\n function attachResizeEvent(element, resized) {\n if (!element) return;\n if (element.resizedAttached) {\n element.resizedAttached.add(resized);\n return;\n }\n\n element.resizedAttached = new EventQueue();\n element.resizedAttached.add(resized);\n\n element.resizeSensor = document.createElement('div');\n element.resizeSensor.dir = 'ltr';\n element.resizeSensor.className = 'resize-sensor';\n\n var style = {\n pointerEvents: 'none',\n position: 'absolute',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px',\n overflow: 'hidden',\n zIndex: '-1',\n visibility: 'hidden',\n maxWidth: '100%'\n };\n var styleChild = {\n position: 'absolute',\n left: '0px',\n top: '0px',\n transition: '0s',\n };\n\n setStyle(element.resizeSensor, style);\n\n var expand = document.createElement('div');\n expand.className = 'resize-sensor-expand';\n setStyle(expand, style);\n\n var expandChild = document.createElement('div');\n setStyle(expandChild, styleChild);\n expand.appendChild(expandChild);\n\n var shrink = document.createElement('div');\n shrink.className = 'resize-sensor-shrink';\n setStyle(shrink, style);\n\n var shrinkChild = document.createElement('div');\n setStyle(shrinkChild, styleChild);\n setStyle(shrinkChild, { width: '200%', height: '200%' });\n shrink.appendChild(shrinkChild);\n\n element.resizeSensor.appendChild(expand);\n element.resizeSensor.appendChild(shrink);\n element.appendChild(element.resizeSensor);\n\n var computedStyle = window.getComputedStyle(element);\n var position = computedStyle ? computedStyle.getPropertyValue('position') : null;\n if ('absolute' !== position && 'relative' !== position && 'fixed' !== position && 'sticky' !== position) {\n element.style.position = 'relative';\n }\n\n var dirty, rafId;\n var size = getElementSize(element);\n var lastWidth = 0;\n var lastHeight = 0;\n var initialHiddenCheck = true;\n lastAnimationFrame = 0;\n\n var resetExpandShrink = function () {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n expandChild.style.width = (width + 10) + 'px';\n expandChild.style.height = (height + 10) + 'px';\n\n expand.scrollLeft = width + 10;\n expand.scrollTop = height + 10;\n\n shrink.scrollLeft = width + 10;\n shrink.scrollTop = height + 10;\n };\n\n var reset = function() {\n // Check if element is hidden\n if (initialHiddenCheck) {\n var invisible = element.offsetWidth === 0 && element.offsetHeight === 0;\n if (invisible) {\n // Check in next frame\n if (!lastAnimationFrame){\n lastAnimationFrame = requestAnimationFrame(function(){\n lastAnimationFrame = 0;\n\n reset();\n });\n }\n\n return;\n } else {\n // Stop checking\n initialHiddenCheck = false;\n }\n }\n\n resetExpandShrink();\n };\n element.resizeSensor.resetSensor = reset;\n\n var onResized = function() {\n rafId = 0;\n\n if (!dirty) return;\n\n lastWidth = size.width;\n lastHeight = size.height;\n\n if (element.resizedAttached) {\n element.resizedAttached.call(size);\n }\n };\n\n var onScroll = function() {\n size = getElementSize(element);\n dirty = size.width !== lastWidth || size.height !== lastHeight;\n\n if (dirty && !rafId) {\n rafId = requestAnimationFrame(onResized);\n }\n\n reset();\n };\n\n var addEvent = function(el, name, cb) {\n if (el.attachEvent) {\n el.attachEvent('on' + name, cb);\n } else {\n el.addEventListener(name, cb);\n }\n };\n\n addEvent(expand, 'scroll', onScroll);\n addEvent(shrink, 'scroll', onScroll);\n\n // Fix for custom Elements\n lastAnimationFrame = requestAnimationFrame(reset);\n }\n\n forEachElement(element, function(elem){\n attachResizeEvent(elem, callback);\n });\n\n this.detach = function(ev) {\n // clean up the unfinished animation frame to prevent a potential endless requestAnimationFrame of reset\n if (!lastAnimationFrame) {\n window.cancelAnimationFrame(lastAnimationFrame);\n lastAnimationFrame = 0;\n }\n ResizeSensor.detach(element, ev);\n };\n\n this.reset = function() {\n element.resizeSensor.resetSensor();\n };\n };\n\n ResizeSensor.reset = function(element) {\n forEachElement(element, function(elem){\n elem.resizeSensor.resetSensor();\n });\n };\n\n ResizeSensor.detach = function(element, ev) {\n forEachElement(element, function(elem){\n if (!elem) return;\n if(elem.resizedAttached && typeof ev === \"function\"){\n elem.resizedAttached.remove(ev);\n if(elem.resizedAttached.length()) return;\n }\n if (elem.resizeSensor) {\n if (elem.contains(elem.resizeSensor)) {\n elem.removeChild(elem.resizeSensor);\n }\n delete elem.resizeSensor;\n delete elem.resizedAttached;\n }\n });\n };\n\n if (typeof MutationObserver !== \"undefined\") {\n var observer = new MutationObserver(function (mutations) {\n for (var i in mutations) {\n if (mutations.hasOwnProperty(i)) {\n var items = mutations[i].addedNodes;\n for (var j = 0; j < items.length; j++) {\n if (items[j].resizeSensor) {\n ResizeSensor.reset(items[j]);\n }\n }\n }\n }\n });\n\n document.addEventListener(\"DOMContentLoaded\", function (event) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n });\n }\n\n return ResizeSensor;\n\n}));","//////////////////////////////////////////////////////////////////////////////////\n// Cloud Zoom V1.0.2.5\n// (c) 2010 by R Cecco. \n// with enhancements by Philipp Andreas \n//\n// MIT License\n//\n// Please retain this copyright header in all versions of the software\n//////////////////////////////////////////////////////////////////////////////////\n(function ($) {\n\n function format(str) {\n for (var i = 1; i < arguments.length; i++) {\n str = str.replace('%' + (i - 1), arguments[i]);\n }\n return str;\n }\n\n function CloudZoom(jWin, opts) {\n var sImg = $('img', jWin);\n var\timg1;\n var\timg2;\n var zoomDiv = null;\n var\t$mouseTrap = null;\n var\tlens = null;\n var\t$tint = null;\n var\tsoftFocus = null;\n var\t$ie6Fix = null;\n var\tzoomImage;\n var controlTimer = 0;\n var cw, ch;\n var destU = 0;\n var\tdestV = 0;\n var currV = 0;\n var currU = 0;\n var filesLoaded = 0;\n var mx,\n my;\n var ctx = this, zw;\n // Display an image loading message. This message gets deleted when the images have loaded and the zoom init function is called.\n // We add a small delay before the message is displayed to avoid the message flicking on then off again virtually immediately if the\n // images load really fast, e.g. from the cache.\n //var\tctx = this;\n setTimeout(function () {\n //\t\t\t\t\t\t \n if ($mouseTrap === null) {\n var w = jWin.width();\n jWin.parent().append('
    ' + \n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ');\n // jWin.parent().append(format('
    ', w / 3, (w / 2) - (w / 6))).find(':last').css('opacity', 0.5);\n }\n }, 200);\n\n\n var ie6FixRemove = function () {\n\n if ($ie6Fix !== null) {\n $ie6Fix.remove();\n $ie6Fix = null;\n }\n };\n\n // Removes cursor, tint layer, blur layer etc.\n this.removeBits = function () {\n //$mouseTrap.unbind();\n if (lens) {\n lens.remove();\n lens = null;\n }\n if ($tint) {\n $tint.remove();\n $tint = null;\n }\n if (softFocus) {\n softFocus.remove();\n softFocus = null;\n }\n ie6FixRemove();\n\n $('.cloud-zoom-loading', jWin.parent()).remove();\n };\n\n\n this.destroy = function () {\n jWin.data('zoom', null);\n\n if ($mouseTrap) {\n $mouseTrap.unbind();\n $mouseTrap.remove();\n $mouseTrap = null;\n }\n if (zoomDiv) {\n zoomDiv.remove();\n zoomDiv = null;\n }\n //ie6FixRemove();\n this.removeBits();\n // DON'T FORGET TO REMOVE JQUERY 'DATA' VALUES\n };\n\n\n // This is called when the zoom window has faded out so it can be removed.\n this.fadedOut = function () {\n\n if (zoomDiv) {\n zoomDiv.remove();\n zoomDiv = null;\n }\n this.removeBits();\n //ie6FixRemove();\n };\n\n this.controlLoop = function () {\n if (lens) {\n var x = (mx - sImg.offset().left - (cw * 0.5)) >> 0;\n var y = (my - sImg.offset().top - (ch * 0.5)) >> 0;\n\n if (x < 0) {\n x = 0;\n }\n else if (x > (sImg.outerWidth() - cw)) {\n x = (sImg.outerWidth() - cw);\n }\n if (y < 0) {\n y = 0;\n }\n else if (y > (sImg.outerHeight() - ch)) {\n y = (sImg.outerHeight() - ch);\n }\n\n lens.css({\n left: x,\n top: y\n });\n lens.css('background-position', (-x) + 'px ' + (-y) + 'px');\n\n destU = (((x) / sImg.outerWidth()) * zoomImage.width) >> 0;\n destV = (((y) / sImg.outerHeight()) * zoomImage.height) >> 0;\n currU += (destU - currU) / opts.smoothMove;\n currV += (destV - currV) / opts.smoothMove;\n\n zoomDiv.css('background-position', (-(currU >> 0) + 'px ') + (-(currV >> 0) + 'px'));\n }\n controlTimer = setTimeout(function () {\n ctx.controlLoop();\n }, 30);\n };\n\n this.init2 = function (img, id) {\n\n filesLoaded++;\n //console.log(img.src + ' ' + id + ' ' + img.width);\n if (id === 1) {\n zoomImage = img;\n }\n //this.images[id] = img;\n if (filesLoaded === 2) {\n this.init();\n }\n };\n\n /* Init function start. */\n this.init = function () {\n // Remove loading message (if present);\n $('.cloud-zoom-loading', jWin.parent()).remove();\n\n\n /* Add a box (mouseTrap) over the small image to trap mouse events.\n It has priority over zoom window to avoid issues with inner zoom.\n We need the dummy background image as IE does not trap mouse events on\n transparent parts of a div.\n */\n $mouseTrap = jWin.parent().append(format(\"
    \", sImg.outerWidth(), sImg.outerHeight(), 0, 0)).find(':last');\n\n //////////////////////////////////////////////////////////////////////\n /* Do as little as possible in mousemove event to prevent slowdown. */\n $mouseTrap.bind('mousemove', this, function (event) {\n // Just update the mouse position\n mx = event.pageX;\n my = event.pageY;\n });\n //////////////////////////////////////////////////////////////////////\n $mouseTrap.bind('mouseleave', this, function (event) {\n clearTimeout(controlTimer);\n //event.data.removeBits();\n if(lens) { lens.fadeOut(299); }\n if($tint) { $tint.fadeOut(299); }\n if(softFocus) { softFocus.fadeOut(299); }\n zoomDiv.fadeOut(300, function () {\n ctx.fadedOut();\n });\n return false;\n });\n //////////////////////////////////////////////////////////////////////\n $mouseTrap.bind('mouseenter', this, function (event) {\n mx = event.pageX;\n my = event.pageY;\n zw = event.data;\n if (zoomDiv) {\n zoomDiv.stop(true, false);\n zoomDiv.remove();\n }\n\n var xPos = opts.adjustX,\n yPos = opts.adjustY;\n\n var siw = sImg.outerWidth();\n var sih = sImg.outerHeight();\n\n var w = opts.zoomWidth;\n var h = opts.zoomHeight;\n if (opts.zoomWidth == 'auto') {\n w = siw;\n }\n if (opts.zoomHeight == 'auto') {\n h = sih;\n }\n //$('#info').text( xPos + ' ' + yPos + ' ' + siw + ' ' + sih );\n var appendTo = opts.customAppendTo || jWin.parent(); // attach to the wrapper\n switch (opts.position) {\n case 'top':\n yPos -= h; // + opts.adjustY;\n break;\n case 'right':\n xPos += siw; // + opts.adjustX;\n break;\n case 'bottom':\n yPos += sih; // + opts.adjustY;\n break;\n case 'left':\n xPos -= w; // + opts.adjustX;\n break;\n case 'inside':\n w = siw;\n h = sih;\n break;\n // All other values, try and find an id in the dom to attach to.\n default:\n appendTo = $('#' + opts.position);\n // If dom element doesn't exit, just use 'right' position as default.\n if (!appendTo.length) {\n appendTo = jWin;\n xPos += siw; //+ opts.adjustX;\n yPos += sih; // + opts.adjustY;\n } else {\n w = appendTo.innerWidth();\n h = appendTo.innerHeight();\n }\n }\n\n zoomDiv = appendTo.append(format('
    ', xPos, yPos, w, h, zoomImage.src)).find(':last');\n\n // Add the title from title tag.\n if (sImg.attr('title') && opts.showTitle) {\n zoomDiv.append(format('
    %0
    ', sImg.attr('title'))).find(':last').css('opacity', opts.titleOpacity);\n }\n\n // Fix ie6 select elements wrong z-index bug. Placing an iFrame over the select element solves the issue...\n var browserCheck = /(msie) ([\\w.]+)/.exec( navigator.userAgent );\n if (browserCheck) {\n if ((browserCheck[1] || \"\") == 'msie' && (browserCheck[2] || \"0\" ) < 7) {\n $ie6Fix = $('').css({\n position: \"absolute\",\n left: xPos,\n top: yPos,\n zIndex: 99,\n width: w,\n height: h\n }).insertBefore(zoomDiv);\n }\n }\n\n zoomDiv.fadeIn(500);\n\n if (lens) {\n lens.remove();\n lens = null;\n } /* Work out size of cursor */\n cw = (sImg.outerWidth() / zoomImage.width) * zoomDiv.width();\n ch = (sImg.outerHeight() / zoomImage.height) * zoomDiv.height();\n\n // Attach mouse, initially invisible to prevent first frame glitch\n lens = jWin.append(format(\"\", cw, ch)).find(':last');\n\n $mouseTrap.css('cursor', lens.css('cursor'));\n\n var noTrans = false;\n\n // Init tint layer if needed. (Not relevant if using inside mode)\n if (opts.tint) {\n lens.css('background', 'url(\"' + sImg.attr('src') + '\")');\n $tint = jWin.append(format('
    ', sImg.outerWidth(), sImg.outerHeight(), opts.tint)).find(':last');\n $tint.css('opacity', opts.tintOpacity);\n noTrans = true;\n $tint.fadeIn(500);\n\n }\n if (opts.softFocus) {\n lens.css('background', 'url(\"' + sImg.attr('src') + '\")');\n softFocus = jWin.append(format('
    ', sImg.outerWidth() - 2, sImg.outerHeight() - 2, opts.tint)).find(':last');\n softFocus.css('background', 'url(\"' + sImg.attr('src') + '\")');\n softFocus.css('opacity', 0.5);\n noTrans = true;\n softFocus.fadeIn(500);\n }\n\n if (!noTrans) {\n lens.css('opacity', opts.lensOpacity);\n }\n if ( opts.position !== 'inside' ) { lens.fadeIn(500); }\n\n // Start processing.\n zw.controlLoop();\n\n return; // Don't return false here otherwise opera will not detect change of the mouse pointer type.\n });\n };\n\n img1 = new Image();\n $(img1).on(\"load\", function () {\n ctx.init2(this, 0);\n });\n img1.src = sImg.attr('src');\n\n img2 = new Image();\n $(img2).on(\"load\", function () {\n ctx.init2(this, 1);\n });\n img2.src = jWin.attr('href');\n }\n\n $.fn.CloudZoom = function (options) {\n // IE6 background image flicker fix\n try {\n document.execCommand(\"BackgroundImageCache\", false, true);\n } catch (e) {}\n this.each(function () {\n var relOpts, opts;\n\n relOpts = {};\n\n var prevOpts = $.extend({}, $.fn.CloudZoom.defaults, options);\n\n if ($(this).is('.cloud-zoom')) {\n opts = $.extend({}, $.fn.CloudZoom.defaults, options);\n opts = $.extend({}, opts, relOpts);\n\n $(this).css({\n 'position': 'relative',\n 'display': 'block'\n });\n $('img', $(this)).css({\n 'display': 'block'\n });\n\n // Wrap an outer div around the link so we can attach things without them becoming part of the link.\n // But not if wrap already exists.\n if (!$(this).parent().hasClass('cloud-zoom-wrap') && opts.useWrapper) {\n $(this).wrap('
    ');\n }\n $(this).data('zoom', new CloudZoom($(this), opts));\n\n } else if ($(this).is('.cloud-zoom-gallery')) {\n opts = $.extend({}, relOpts, options);\n $(this).data('relOpts', opts);\n $(this).bind('click', $(this), function (event) {\n var data = event.data.data('relOpts');\n // Destroy the previous zoom\n $('#' + data.useZoom).data('zoom').destroy();\n // Change the biglink to point to the new big image.\n $('#' + data.useZoom).attr('href', event.data.attr('href'));\n // Change the small image to point to the new small image.\n $('#' + data.useZoom + ' img').attr('src', event.data.data('relOpts').smallImage);\n // Init a new zoom with the new images.\n $('#' + event.data.data('relOpts').useZoom).CloudZoom(prevOpts);\n return false;\n });\n }\n });\n return this;\n };\n\n $.fn.CloudZoom.defaults = {\n zoomWidth: 'auto',\n zoomHeight: 'auto',\n position: 'right',\n transparentImage: '.',\n useWrapper: true,\n tint: false,\n tintOpacity: 0.5,\n lensOpacity: 0.5,\n softFocus: false,\n smoothMove: 3,\n showTitle: true,\n titleOpacity: 0.5,\n adjustX: 0,\n adjustY: 0,\n customAppendTo: undefined\n };\n\n})(jQuery);\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.SpriteSpin = {})));\n}(this, (function (exports) { 'use strict';\n\n/**\n * @internal\n */\nvar Api = /** @class */ (function () {\n function Api(data) {\n this.data = data;\n }\n return Api;\n}());\n/**\n * Adds methods to the SpriteSpin api\n *\n * @public\n */\nfunction extendApi(methods) {\n var api = Api.prototype;\n for (var key in methods) {\n if (methods.hasOwnProperty(key)) {\n if (api[key]) {\n throw new Error('API method is already defined: ' + key);\n }\n else {\n api[key] = methods[key];\n }\n }\n }\n return api;\n}\n\nvar $$1 = window.jQuery || window.$;\n\nfunction getCursorPosition(event) {\n var touches = event.touches;\n var source = event;\n // jQuery Event normalization does not preserve the 'event.touches'\n // try to grab touches from the original event\n if (event.touches === undefined && event.originalEvent !== undefined) {\n touches = event.originalEvent.touches;\n }\n // get current touch or mouse position\n if (touches !== undefined && touches.length > 0) {\n source = touches[0];\n }\n return {\n x: source.clientX || 0,\n y: source.clientY || 0\n };\n}\n\nvar canvas;\nvar context;\nfunction detectionContext() {\n if (context) {\n return context;\n }\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n if (!canvas || !canvas.getContext) {\n return null;\n }\n context = canvas.getContext('2d');\n return context;\n}\n/**\n * Idea taken from https://github.com/stomita/ios-imagefile-megapixel\n * Detects whether the image has been sub sampled by the browser and does not have its original dimensions.\n * This method unfortunately does not work for images that have transparent background.\n */\nfunction detectSubsampling(img, width, height) {\n if (!detectionContext()) {\n return false;\n }\n // sub sampling happens on images above 1 megapixel\n if (width * height <= 1024 * 1024) {\n return false;\n }\n // set canvas to 1x1 pixel size and fill it with magenta color\n canvas.width = canvas.height = 1;\n context.fillStyle = '#FF00FF';\n context.fillRect(0, 0, 1, 1);\n // render the image with a negative offset to the left so that it would\n // fill the canvas pixel with the top right pixel of the image.\n context.drawImage(img, -width + 1, 0);\n // check color value to confirm image is covering edge pixel or not.\n // if color still magenta, the image is assumed to be sub sampled.\n try {\n var dat = context.getImageData(0, 0, 1, 1).data;\n return (dat[0] === 255) && (dat[1] === 0) && (dat[2] === 255);\n }\n catch (err) {\n // avoids cross origin exception for chrome when code runs without a server\n return false;\n }\n}\n\n/**\n *\n */\nfunction getOuterSize(data) {\n var width = Math.floor(data.width || data.frameWidth || data.target.innerWidth());\n var height = Math.floor(data.height || data.frameHeight || data.target.innerHeight());\n return {\n aspect: width / height,\n height: height,\n width: width\n };\n}\nfunction getComputedSize(data) {\n var size = getOuterSize(data);\n if (typeof window.getComputedStyle !== 'function') {\n return size;\n }\n var style = window.getComputedStyle(data.target[0]);\n if (!style.width) {\n return size;\n }\n size.width = Math.floor(Number(style.width.replace('px', '')));\n size.height = Math.floor(size.width / size.aspect);\n return size;\n}\n/**\n *\n */\nfunction getInnerSize(data) {\n var width = Math.floor(data.frameWidth || data.width || data.target.innerWidth());\n var height = Math.floor(data.frameHeight || data.height || data.target.innerHeight());\n return {\n aspect: width / height,\n height: height,\n width: width\n };\n}\n/**\n *\n */\nfunction getInnerLayout(mode, inner, outer) {\n // get mode\n var isFit = mode === 'fit';\n var isFill = mode === 'fill';\n var isMatch = mode === 'stretch';\n // resulting layout\n var layout = {\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n position: 'absolute',\n overflow: 'hidden'\n };\n // no calculation here\n if (!mode || isMatch) {\n return layout;\n }\n // get size and aspect\n var aspectIsGreater = inner.aspect >= outer.aspect;\n // mode == original\n var width = inner.width;\n var height = inner.height;\n // keep aspect ratio but fit/fill into container\n if (isFit && aspectIsGreater || isFill && !aspectIsGreater) {\n width = outer.width;\n height = outer.width / inner.aspect;\n }\n if (isFill && aspectIsGreater || isFit && !aspectIsGreater) {\n height = outer.height;\n width = outer.height * inner.aspect;\n }\n // floor the numbers\n width = Math.floor(width);\n height = Math.floor(height);\n // position in center\n layout.width = width;\n layout.height = height;\n layout.top = Math.floor((outer.height - height) / 2);\n layout.left = Math.floor((outer.width - width) / 2);\n layout.right = layout.left;\n layout.bottom = layout.top;\n return layout;\n}\n\nvar img;\n/**\n * gets the original width and height of an image element\n */\nfunction naturalSize(image) {\n // for browsers that support naturalWidth and naturalHeight properties\n if (image.naturalWidth) {\n return {\n height: image.naturalHeight,\n width: image.naturalWidth\n };\n }\n // browsers that do not support naturalWidth and naturalHeight properties have to fall back to the width and\n // height properties. However, the image might have a css style applied so width and height would return the\n // css size. To avoid that create a new Image object that is free of css rules and grab width and height\n // properties\n //\n // assume that the src has already been downloaded, so no onload callback is needed.\n img = img || new Image();\n img.crossOrigin = image.crossOrigin;\n img.src = image.src;\n return {\n height: img.height,\n width: img.width\n };\n}\n\n/**\n * Measures the image frames that are used in the given data object\n */\nfunction measure(images, options) {\n if (images.length === 1) {\n return [measureSheet(images[0], options)];\n }\n else if (options.framesX && options.framesY) {\n return measureMutipleSheets(images, options);\n }\n else {\n return measureFrames(images, options);\n }\n}\nfunction measureSheet(image, options) {\n var result = { id: 0, sprites: [] };\n measureImage(image, options, result);\n var frames = options.frames;\n var framesX = Number(options.framesX) || frames;\n var framesY = Math.ceil(frames / framesX);\n var frameWidth = Math.floor(result.width / framesX);\n var frameHeight = Math.floor(result.height / framesY);\n var divisor = result.isSubsampled ? 2 : 1;\n for (var i = 0; i < frames; i++) {\n var x = (i % framesX) * frameWidth;\n var y = Math.floor(i / framesX) * frameHeight;\n result.sprites.push({\n id: i,\n x: x, y: y,\n width: frameWidth,\n height: frameHeight,\n sampledX: x / divisor,\n sampledY: y / divisor,\n sampledWidth: frameWidth / divisor,\n sampledHeight: frameHeight / divisor\n });\n }\n return result;\n}\nfunction measureFrames(images, options) {\n var result = [];\n for (var id = 0; id < images.length; id++) {\n // TODO: optimize\n // don't measure images with same size twice\n var sheet = measureSheet(images[id], { frames: 1, framesX: 1, detectSubsampling: options.detectSubsampling });\n sheet.id = id;\n result.push(sheet);\n }\n return result;\n}\nfunction measureMutipleSheets(images, options) {\n var result = [];\n for (var id = 0; id < images.length; id++) {\n // TODO: optimize\n // don't measure images with same size twice\n var sheet = measureSheet(images[id], {\n frames: undefined,\n framesX: options.framesX,\n framesY: options.framesY,\n detectSubsampling: options.detectSubsampling\n });\n sheet.id = id;\n result.push(sheet);\n }\n return result;\n}\nfunction measureImage(image, options, result) {\n var size = naturalSize(image);\n result.isSubsampled = options.detectSubsampling && detectSubsampling(image, size.width, size.height);\n result.width = size.width;\n result.height = size.height;\n result.sampledWidth = size.width / (result.isSubsampled ? 2 : 1);\n result.sampledHeight = size.height / (result.isSubsampled ? 2 : 1);\n return result;\n}\nfunction findSpecs(metrics, frames, frame, lane) {\n var spriteId = lane * frames + frame;\n var sheetId = 0;\n var sprite = null;\n var sheet = null;\n while (true) {\n sheet = metrics[sheetId];\n if (!sheet) {\n break;\n }\n if (spriteId >= sheet.sprites.length) {\n spriteId -= sheet.sprites.length;\n sheetId++;\n continue;\n }\n sprite = sheet.sprites[spriteId];\n break;\n }\n return { sprite: sprite, sheet: sheet };\n}\n\nfunction indexOf(element, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === element) {\n return i;\n }\n }\n}\nfunction noop() {\n //\n}\nfunction preload(opts) {\n var src;\n var input = opts.source;\n src = typeof input === 'string' ? [input] : input;\n // const src: string[] = ? [opts.source] : opts.source\n var images = [];\n var targetCount = (opts.preloadCount || src.length);\n var onInitiated = opts.initiated || noop;\n var onProgress = opts.progress || noop;\n var onComplete = opts.complete || noop;\n var count = 0;\n var completed = false;\n var firstLoaded = false;\n var tick = function () {\n count += 1;\n onProgress({\n index: indexOf(this, images),\n loaded: count,\n total: src.length,\n percent: Math.round((count / src.length) * 100)\n });\n firstLoaded = firstLoaded || (this === images[0]);\n if (firstLoaded && !completed && (count >= targetCount)) {\n completed = true;\n onComplete(images);\n }\n };\n for (var _i = 0, src_1 = src; _i < src_1.length; _i++) {\n var url = src_1[_i];\n var img = new Image();\n // push result\n images.push(img);\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n img.crossOrigin = opts.crossOrigin;\n // bind logic, don't care about abort/errors\n img.onload = img.onabort = img.onerror = tick;\n // begin load\n img.src = url;\n }\n onInitiated(images);\n}\n\nfunction padNumber(num, length, pad) {\n var result = String(num);\n while (result.length < length) {\n result = String(pad) + result;\n }\n return result;\n}\n/**\n * Generates an array of source strings\n *\n * @remarks\n * Takes a template string and generates an array of strings by interpolating {lane} and {frame} placeholders.\n *\n * ```\n * sourceArray('http://example.com/image_{frame}.jpg, { frame: [1, 3], digits: 2 })\n * // gives:\n * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\n *\n * sourceArray('http://example.com/image_FRAME.jpg, { frame: [1, 3], digits: 2, framePlacer: 'FRAME' })\n * // gives:\n * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\n * ```\n *\n * @param template - The template string\n * @param opts - Interpolation options\n *\n * @public\n */\nfunction sourceArray(template, opts) {\n var digits = opts.digits || 2;\n var lPlacer = opts.lanePlacer || '{lane}';\n var fPlacer = opts.framePlacer || '{frame}';\n var fStart = 0;\n var fEnd = 0;\n if (opts.frame) {\n fStart = opts.frame[0];\n fEnd = opts.frame[1];\n }\n var lStart = 0;\n var lEnd = 0;\n if (opts.lane) {\n lStart = opts.lane[0];\n lEnd = opts.lane[1];\n }\n var result = [];\n for (var lane = lStart; lane <= lEnd; lane += 1) {\n for (var frame = fStart; frame <= fEnd; frame += 1) {\n result.push(template\n .replace(lPlacer, padNumber(lane, digits, '0'))\n .replace(fPlacer, padNumber(frame, digits, '0')));\n }\n }\n return result;\n}\n\n/**\n * The namespace that is used to bind functions to DOM events and store the data object\n */\nvar namespace = 'spritespin';\n/**\n * Event names that are recognized by SpriteSpin. A module can implement any of these and they will be bound\n * to the target element on which the plugin is called.\n */\nvar eventNames = [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouseenter',\n 'mouseover',\n 'mouseleave',\n 'mousewheel',\n 'wheel',\n 'click',\n 'dblclick',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'selectstart',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n];\n/**\n *\n */\nvar callbackNames = [\n 'onInit',\n 'onProgress',\n 'onLoad',\n 'onFrameChanged',\n 'onFrame',\n 'onDraw',\n 'onComplete',\n 'onDestroy'\n];\n/**\n * Names of events for that the default behavior should be prevented.\n */\nvar eventsToPrevent = [\n 'dragstart'\n];\n/**\n * Default set of SpriteSpin options. This also represents the majority of data attributes that are used during the\n * lifetime of a SpriteSpin instance. The data is stored inside the target DOM element on which the plugin is called.\n */\nvar defaults = {\n source: undefined,\n width: undefined,\n height: undefined,\n frames: undefined,\n framesX: undefined,\n lanes: 1,\n sizeMode: undefined,\n renderer: 'canvas',\n lane: 0,\n frame: 0,\n frameTime: 40,\n animate: true,\n retainAnimate: false,\n reverse: false,\n loop: true,\n stopFrame: 0,\n wrap: true,\n wrapLane: false,\n sense: 1,\n senseLane: undefined,\n orientation: 'horizontal',\n detectSubsampling: true,\n preloadCount: undefined,\n touchScrollTimer: [200, 1500],\n responsive: undefined,\n plugins: undefined\n};\n\nfunction noop$1() {\n // noop\n}\nfunction wrapConsole(type) {\n return console && console[type] ? function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return console.log.apply(console, args);\n } : noop$1;\n}\nvar log = wrapConsole('log');\nvar warn = wrapConsole('warn');\nvar error = wrapConsole('error');\nfunction toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n/**\n * clamps the given value by the given min and max values\n */\nfunction clamp(value, min, max) {\n return (value > max ? max : (value < min ? min : value));\n}\n/**\n *\n */\nfunction wrap(value, min, max, size) {\n while (value > max) {\n value -= size;\n }\n while (value < min) {\n value += size;\n }\n return value;\n}\n/**\n * prevents default action on the given event\n */\nfunction prevent(e) {\n e.preventDefault();\n return false;\n}\n/**\n * Binds on the given target and event the given function.\n * The SpriteSpin namespace is attached to the event name\n */\nfunction bind(target, event, func) {\n if (func) {\n target.bind(event + '.' + namespace, function (e) {\n func.apply(target, [e, target.spritespin('data')]);\n });\n }\n}\n/**\n * Unbinds all SpriteSpin events from given target element\n */\nfunction unbind(target) {\n target.unbind('.' + namespace);\n}\n/**\n * Checks if given object is a function\n */\nfunction isFunction(fn) {\n return typeof fn === 'function';\n}\nfunction pixelRatio(context) {\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio || 1;\n return devicePixelRatio / backingStoreRatio;\n}\n\n/**\n * Applies css attributes to layout the SpriteSpin containers.\n *\n * @internal\n */\nfunction applyLayout(data) {\n // disable selection\n data.target\n .attr('unselectable', 'on')\n .css({\n width: '',\n height: '',\n '-ms-user-select': 'none',\n '-moz-user-select': 'none',\n '-khtml-user-select': 'none',\n '-webkit-user-select': 'none',\n 'user-select': 'none'\n });\n var size = data.responsive ? getComputedSize(data) : getOuterSize(data);\n var layout = getInnerLayout(data.sizeMode, getInnerSize(data), size);\n // apply layout on target\n data.target.css({\n width: size.width,\n height: size.height,\n position: 'relative',\n overflow: 'hidden'\n });\n // apply layout on stage\n data.stage\n .css(layout)\n .hide();\n if (!data.canvas) {\n return;\n }\n // apply layout on canvas\n data.canvas.css(layout).hide();\n // apply pixel ratio on canvas\n data.canvasRatio = data.canvasRatio || pixelRatio(data.context);\n if (typeof layout.width === 'number' && typeof layout.height === 'number') {\n data.canvas[0].width = (layout.width * data.canvasRatio) || size.width;\n data.canvas[0].height = (layout.height * data.canvasRatio) || size.height;\n }\n else {\n data.canvas[0].width = (size.width * data.canvasRatio);\n data.canvas[0].height = (size.height * data.canvasRatio);\n }\n // width and height must be set before calling scale\n data.context.scale(data.canvasRatio, data.canvasRatio);\n}\n\n/**\n * Gets a state object by name.\n * @internal\n * @param data - The SpriteSpin instance data\n * @param name - The name of the state object\n */\nfunction getState(data, name) {\n data.state = data.state || {};\n data.state[name] = data.state[name] || {};\n return data.state[name];\n}\n/**\n * Gets a plugin state object by name.\n *\n * @remarks\n * Plugins should use this method to get or create a state object where they can\n * store any instance variables.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param name - The name of the plugin\n */\nfunction getPluginState(data, name) {\n var state = getState(data, 'plugin');\n state[name] = state[name] || {};\n return state[name];\n}\n/**\n * Checks whether a flag is set. See {@link flag}.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param key - The name of the flag\n */\nfunction is(data, key) {\n return !!getState(data, 'flags')[key];\n}\n/**\n * Sets a flag value. See {@link is}.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param key - The name of the flag\n * @param value - The value to set\n */\nfunction flag(data, key, value) {\n getState(data, 'flags')[key] = !!value;\n}\n\n/**\n * Gets the playback state\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nfunction getPlaybackState(data) {\n return getState(data, 'playback');\n}\nfunction updateLane(data, lane) {\n data.lane = data.wrapLane\n ? wrap(lane, 0, data.lanes - 1, data.lanes)\n : clamp(lane, 0, data.lanes - 1);\n}\nfunction updateAnimationFrame(data) {\n data.frame += (data.reverse ? -1 : 1);\n // wrap the frame value to fit in range [0, data.frames)\n data.frame = wrap(data.frame, 0, data.frames - 1, data.frames);\n // stop animation if loop is disabled and the stopFrame is reached\n if (!data.loop && (data.frame === data.stopFrame)) {\n stopAnimation(data);\n }\n}\nfunction updateInputFrame(data, frame) {\n data.frame = Number(frame);\n data.frame = data.wrap\n ? wrap(data.frame, 0, data.frames - 1, data.frames)\n : clamp(data.frame, 0, data.frames - 1);\n}\nfunction updateAnimation(data) {\n var state = getPlaybackState(data);\n if (state.handler) {\n updateBefore(data);\n updateAnimationFrame(data);\n updateAfter(data);\n }\n}\nfunction updateBefore(data) {\n var state = getPlaybackState(data);\n state.lastFrame = data.frame;\n state.lastLane = data.lane;\n}\nfunction updateAfter(data) {\n var state = getPlaybackState(data);\n if (state.lastFrame !== data.frame || state.lastLane !== data.lane) {\n data.target.trigger('onFrameChanged.' + namespace, data);\n }\n data.target.trigger('onFrame.' + namespace, data);\n data.target.trigger('onDraw.' + namespace, data);\n}\n/**\n * Updates the frame or lane number of the SpriteSpin data.\n *\n * @public\n * @param data - The SpriteSpin instance data\n * @param frame - The frame number to set\n * @param lane - The lane number to set\n */\nfunction updateFrame(data, frame, lane) {\n updateBefore(data);\n if (frame != null) {\n updateInputFrame(data, frame);\n }\n if (lane != null) {\n updateLane(data, lane);\n }\n updateAfter(data);\n}\n/**\n * Stops the running animation.\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nfunction stopAnimation(data) {\n data.animate = false;\n var state = getPlaybackState(data);\n if (state.handler != null) {\n window.clearInterval(state.handler);\n state.handler = null;\n }\n}\n/**\n * Starts animation playback if needed.\n *\n * @remarks\n * Starts animation playback if `animate` property is `true` and the animation is not yet running.\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nfunction applyAnimation(data) {\n var state = getPlaybackState(data);\n if (state.handler && (!data.animate || state.frameTime !== data.frameTime)) {\n stopAnimation(data);\n }\n if (data.animate && !state.handler) {\n state.frameTime = data.frameTime;\n state.handler = window.setInterval(function () { return updateAnimation(data); }, state.frameTime);\n }\n}\n/**\n * Starts the animation playback\n *\n * @remarks\n * Starts the animation playback and also sets the `animate` property to `true`\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nfunction startAnimation(data) {\n data.animate = true;\n applyAnimation(data);\n}\n\nvar plugins = {};\n/**\n * Registers a plugin.\n *\n * @remarks\n * Use this to add custom Rendering or Updating modules that can be addressed with the 'module' option.\n *\n * @public\n * @param name - The name of the plugin\n * @param plugin - The plugin implementation\n */\nfunction registerPlugin(name, plugin) {\n if (plugins[name]) {\n error(\"Plugin name \\\"\" + name + \"\\\" is already taken\");\n return;\n }\n plugin = plugin || {};\n plugins[name] = plugin;\n return plugin;\n}\n/**\n * Registers a plugin.\n *\n * @public\n * @deprecated Use {@link registerPlugin} instead\n * @param name - The name of the plugin\n * @param plugin - The plugin implementation\n */\nfunction registerModule(name, plugin) {\n warn('\"registerModule\" is deprecated, use \"registerPlugin\" instead');\n registerPlugin(name, plugin);\n}\n/**\n * Gets an active plugin by name\n *\n * @internal\n * @param name - The name of the plugin\n */\nfunction getPlugin(name) {\n return plugins[name];\n}\n/**\n * Replaces module names on given SpriteSpin data and replaces them with actual implementations.\n * @internal\n */\nfunction applyPlugins(data) {\n fixPlugins(data);\n for (var i = 0; i < data.plugins.length; i += 1) {\n var name_1 = data.plugins[i];\n if (typeof name_1 !== 'string') {\n continue;\n }\n var plugin = getPlugin(name_1);\n if (!plugin) {\n error('No plugin found with name ' + name_1);\n continue;\n }\n data.plugins[i] = plugin;\n }\n}\nfunction fixPlugins(data) {\n // tslint:disable no-string-literal\n if (data['mods']) {\n warn('\"mods\" option is deprecated, use \"plugins\" instead');\n data.plugins = data['mods'];\n delete data['mods'];\n }\n if (data['behavior']) {\n warn('\"behavior\" option is deprecated, use \"plugins\" instead');\n data.plugins.push(data['behavior']);\n delete data['behavior'];\n }\n if (data['module']) {\n warn('\"module\" option is deprecated, use \"plugins\" instead');\n data.plugins.push(data['module']);\n delete data['module'];\n }\n}\n\nvar $$2 = $$1;\nvar counter = 0;\n/**\n * Collection of all SpriteSpin instances\n */\nvar instances = {};\nfunction pushInstance(data) {\n counter += 1;\n data.id = String(counter);\n instances[data.id] = data;\n}\nfunction popInstance(data) {\n delete instances[data.id];\n}\nfunction eachInstance(cb) {\n for (var id in instances) {\n if (instances.hasOwnProperty(id)) {\n cb(instances[id]);\n }\n }\n}\nvar lazyinit = function () {\n // replace function with a noop\n // this logic must run only once\n lazyinit = function () { };\n function onEvent(eventName, e) {\n eachInstance(function (data) {\n for (var _i = 0, _a = data.plugins; _i < _a.length; _i++) {\n var module_1 = _a[_i];\n if (typeof module_1[eventName] === 'function') {\n module_1[eventName].apply(data.target, [e, data]);\n }\n }\n });\n }\n function onResize() {\n eachInstance(function (data) {\n if (data.responsive) {\n boot(data);\n }\n });\n }\n var _loop_1 = function (eventName) {\n $$2(window.document).bind(eventName + '.' + namespace, function (e) {\n onEvent('document' + eventName, e);\n });\n };\n for (var _i = 0, eventNames_1 = eventNames; _i < eventNames_1.length; _i++) {\n var eventName = eventNames_1[_i];\n _loop_1(eventName);\n }\n var resizeTimeout = null;\n $$2(window).on('resize', function () {\n window.clearTimeout(resizeTimeout);\n resizeTimeout = window.setTimeout(onResize, 100);\n });\n};\n/**\n * (re)binds all spritespin events on the target element\n *\n * @internal\n */\nfunction applyEvents(data) {\n var target = data.target;\n // Clear all SpriteSpin events on the target element\n unbind(target);\n // disable all default browser behavior on the following events\n // mainly prevents image drag operation\n for (var _i = 0, eventsToPrevent_1 = eventsToPrevent; _i < eventsToPrevent_1.length; _i++) {\n var eName = eventsToPrevent_1[_i];\n bind(target, eName, prevent);\n }\n // Bind module functions to SpriteSpin events\n for (var _a = 0, _b = data.plugins; _a < _b.length; _a++) {\n var plugin = _b[_a];\n for (var _c = 0, eventNames_2 = eventNames; _c < eventNames_2.length; _c++) {\n var eName = eventNames_2[_c];\n bind(target, eName, plugin[eName]);\n }\n for (var _d = 0, callbackNames_1 = callbackNames; _d < callbackNames_1.length; _d++) {\n var eName = callbackNames_1[_d];\n bind(target, eName, plugin[eName]);\n }\n }\n // bind auto start function to load event.\n bind(target, 'onLoad', function (e, d) {\n applyAnimation(d);\n });\n // bind all user events that have been passed on initialization\n for (var _e = 0, callbackNames_2 = callbackNames; _e < callbackNames_2.length; _e++) {\n var eName = callbackNames_2[_e];\n bind(target, eName, data[eName]);\n }\n}\nfunction applyMetrics(data) {\n if (!data.images) {\n data.metrics = [];\n }\n data.metrics = measure(data.images, data);\n var spec = findSpecs(data.metrics, data.frames, 0, 0);\n if (spec.sprite) {\n // TODO: try to remove frameWidth/frameHeight\n data.frameWidth = spec.sprite.width;\n data.frameHeight = spec.sprite.height;\n }\n}\n/**\n * Runs the boot process.\n *\n * @remarks\n * (re)initializes plugins, (re)initializes the layout, (re)binds events and loads source images.\n *\n * @internal\n */\nfunction boot(data) {\n applyPlugins(data);\n applyEvents(data);\n applyLayout(data);\n data.source = toArray(data.source);\n data.loading = true;\n data.target\n .addClass('loading')\n .trigger('onInit.' + namespace, data);\n preload({\n source: data.source,\n crossOrigin: data.crossOrigin,\n preloadCount: data.preloadCount,\n progress: function (progress) {\n data.progress = progress;\n data.target.trigger('onProgress.' + namespace, data);\n },\n complete: function (images) {\n data.images = images;\n data.loading = false;\n data.frames = data.frames || images.length;\n applyMetrics(data);\n applyLayout(data);\n data.stage.show();\n data.target\n .removeClass('loading')\n .trigger('onLoad.' + namespace, data)\n .trigger('onFrame.' + namespace, data)\n .trigger('onDraw.' + namespace, data)\n .trigger('onComplete.' + namespace, data);\n }\n });\n}\n/**\n * Creates a new SpriteSpin instance\n *\n * @public\n */\nfunction create(options) {\n var _this = this;\n var target = options.target;\n // SpriteSpin is not initialized\n // Create default settings object and extend with given options\n var data = $$2.extend(true, {}, defaults, options);\n // ensure source is set\n data.source = data.source || [];\n // ensure plugins are set\n data.plugins = data.plugins || [\n '360',\n 'drag'\n ];\n // if image tags are contained inside this DOM element\n // use these images as the source files\n target.find('img').each(function () {\n if (!Array.isArray(data.source)) {\n data.source = [];\n }\n data.source.push($$2(_this).attr('src'));\n });\n // build inner html\n //
    \n //
    \n // \n //
    \n target\n .empty()\n .addClass('spritespin-instance')\n .append(\"
    \");\n // add the canvas element if canvas rendering is enabled and supported\n if (data.renderer === 'canvas') {\n var canvas = document.createElement('canvas');\n if (!!(canvas.getContext && canvas.getContext('2d'))) {\n data.canvas = $$2(canvas).addClass('spritespin-canvas');\n data.context = canvas.getContext('2d');\n target.append(data.canvas);\n target.addClass('with-canvas');\n }\n else {\n // fallback to image rendering mode\n data.renderer = 'image';\n }\n }\n // setup references to DOM elements\n data.target = target;\n data.stage = target.find('.spritespin-stage');\n // store the data\n target.data(namespace, data);\n pushInstance(data);\n return data;\n}\n/**\n * Creates a new SpriteSpin instance, or updates an existing one\n *\n * @public\n */\nfunction createOrUpdate(options) {\n lazyinit();\n var data = options.target.data(namespace);\n if (!data) {\n data = create(options);\n }\n else {\n $$2.extend(data, options);\n }\n boot(data);\n return data;\n}\n/**\n * Destroys the SpriteSpin instance\n *\n * @remarks\n * - stops running animation\n * - unbinds all events\n * - deletes the data on the target element\n *\n * @public\n */\nfunction destroy(data) {\n popInstance(data);\n stopAnimation(data);\n data.target\n .trigger('onDestroy', data)\n .html(null)\n .attr('style', null)\n .attr('unselectable', null)\n .removeClass(['spritespin-instance', 'with-canvas']);\n unbind(data.target);\n data.target.removeData(namespace);\n}\n\n/**\n * Gets the current input state\n *\n * @public\n * @param data - The SpriteSpin instance data\n */\nfunction getInputState(data) {\n return getState(data, 'input');\n}\n/**\n * Updates the input state using a mouse or touch event.\n *\n * @public\n * @param e - The input event\n * @param data - The SpriteSpin instance data\n */\nfunction updateInput(e, data) {\n var cursor = getCursorPosition(e);\n var state = getInputState(data);\n // cache positions from previous frame\n state.oldX = state.currentX;\n state.oldY = state.currentY;\n state.currentX = cursor.x;\n state.currentY = cursor.y;\n // Fix old position.\n if (state.oldX === undefined || state.oldY === undefined) {\n state.oldX = state.currentX;\n state.oldY = state.currentY;\n }\n // Cache the initial click/touch position and store the frame number at which the click happened.\n // Useful for different behavior implementations. This must be restored when the click/touch is released.\n if (state.startX === undefined || state.startY === undefined) {\n state.startX = state.currentX;\n state.startY = state.currentY;\n state.clickframe = data.frame;\n state.clicklane = data.lane;\n }\n // Calculate the vector from start position to current pointer position.\n state.dX = state.currentX - state.startX;\n state.dY = state.currentY - state.startY;\n // Calculate the vector from last frame position to current pointer position.\n state.ddX = state.currentX - state.oldX;\n state.ddY = state.currentY - state.oldY;\n // Normalize vectors to range [-1:+1]\n state.ndX = state.dX / data.target.innerWidth();\n state.ndY = state.dY / data.target.innerHeight();\n state.nddX = state.ddX / data.target.innerWidth();\n state.nddY = state.ddY / data.target.innerHeight();\n}\n/**\n * Resets the input state.\n *\n * @public\n */\nfunction resetInput(data) {\n var input = getInputState(data);\n input.startX = input.startY = undefined;\n input.currentX = input.currentY = undefined;\n input.oldX = input.oldY = undefined;\n input.dX = input.dY = 0;\n input.ddX = input.ddY = 0;\n input.ndX = input.ndY = 0;\n input.nddX = input.nddY = 0;\n}\n\nfunction extension(option, value) {\n var $target = $$1(this);\n if (option === 'data') {\n return $target.data(namespace);\n }\n if (option === 'api') {\n var data = $target.data(namespace);\n data.api = data.api || new Api(data);\n return data.api;\n }\n if (option === 'destroy') {\n return $target.each(function () {\n var data = $target.data(namespace);\n if (data) {\n destroy(data);\n }\n });\n }\n if (arguments.length === 2 && typeof option === 'string') {\n option = (_a = {}, _a[option] = value, _a);\n }\n if (typeof option === 'object') {\n return createOrUpdate($$1.extend(true, { target: $target }, option)).target;\n }\n throw new Error('Invalid call to spritespin');\n var _a;\n}\n$$1.fn[namespace] = extension;\n\n// tslint:disable:object-literal-shorthand\n// tslint:disable:only-arrow-functions\nextendApi({\n // Gets a value indicating whether the animation is currently running.\n isPlaying: function () {\n return getPlaybackState(this.data).handler != null;\n },\n // Gets a value indicating whether the animation looping is enabled.\n isLooping: function () {\n return this.data.loop;\n },\n // Starts/Stops the animation playback\n toggleAnimation: function () {\n if (this.isPlaying()) {\n this.stopAnimation();\n }\n else {\n this.startAnimation();\n }\n },\n // Stops animation playback\n stopAnimation: function () {\n this.data.animate = false;\n stopAnimation(this.data);\n },\n // Starts animation playback\n startAnimation: function () {\n this.data.animate = true;\n applyAnimation(this.data);\n },\n // Sets a value indicating whether the animation should be looped or not.\n // This might start the animation (if the 'animate' data attribute is set to true)\n loop: function (value) {\n this.data.loop = value;\n applyAnimation(this.data);\n return this;\n },\n // Gets the current frame number\n currentFrame: function () {\n return this.data.frame;\n },\n // Updates SpriteSpin to the specified frame.\n updateFrame: function (frame) {\n updateFrame(this.data, frame);\n return this;\n },\n // Skips the given number of frames\n skipFrames: function (step) {\n var data = this.data;\n updateFrame(data, data.frame + (data.reverse ? -step : +step));\n return this;\n },\n // Updates SpriteSpin so that the next frame is shown\n nextFrame: function () {\n return this.skipFrames(1);\n },\n // Updates SpriteSpin so that the previous frame is shown\n prevFrame: function () {\n return this.skipFrames(-1);\n },\n // Starts the animations that will play until the given frame number is reached\n // options:\n // force [boolean] starts the animation, even if current frame is the target frame\n // nearest [boolean] animates to the direction with minimum distance to the target frame\n playTo: function (frame, options) {\n var data = this.data;\n options = options || {};\n if (!options.force && data.frame === frame) {\n return;\n }\n if (options.nearest) {\n // distance to the target frame\n var a = frame - data.frame;\n // distance to last frame and the to target frame\n var b = frame > data.frame ? a - data.frames : a + data.frames;\n // minimum distance\n var c = Math.abs(a) < Math.abs(b) ? a : b;\n data.reverse = c < 0;\n }\n data.animate = true;\n data.loop = false;\n data.stopFrame = frame;\n applyAnimation(data);\n return this;\n }\n});\n\nfunction pick(target, names) {\n for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {\n var name_1 = names_1[_i];\n if (target[name_1] || name_1 in target) {\n return name_1;\n }\n }\n return names[0];\n}\nvar browser = {\n requestFullscreen: pick(document.documentElement, [\n 'requestFullscreen',\n 'webkitRequestFullScreen',\n 'mozRequestFullScreen',\n 'msRequestFullscreen'\n ]),\n exitFullscreen: pick(document, [\n 'exitFullscreen',\n 'webkitExitFullscreen',\n 'webkitCancelFullScreen',\n 'mozCancelFullScreen',\n 'msExitFullscreen'\n ]),\n fullscreenElement: pick(document, [\n 'fullscreenElement',\n 'webkitFullscreenElement',\n 'webkitCurrentFullScreenElement',\n 'mozFullScreenElement',\n 'msFullscreenElement'\n ]),\n fullscreenEnabled: pick(document, [\n 'fullscreenEnabled',\n 'webkitFullscreenEnabled',\n 'mozFullScreenEnabled',\n 'msFullscreenEnabled'\n ]),\n fullscreenchange: pick(document, [\n 'onfullscreenchange',\n 'onwebkitfullscreenchange',\n 'onmozfullscreenchange',\n 'onMSFullscreenChange'\n ]).replace(/^on/, ''),\n fullscreenerror: pick(document, [\n 'onfullscreenerror',\n 'onwebkitfullscreenerror',\n 'onmozfullscreenerror',\n 'onMSFullscreenError'\n ]).replace(/^on/, '')\n};\nvar changeEvent = browser.fullscreenchange + '.' + namespace + '-fullscreen';\nfunction unbindChangeEvent() {\n $$1(document).unbind(changeEvent);\n}\nfunction bindChangeEvent(callback) {\n unbindChangeEvent();\n $$1(document).bind(changeEvent, callback);\n}\nvar orientationEvent = 'orientationchange.' + namespace + '-fullscreen';\nfunction unbindOrientationEvent() {\n $$1(window).unbind(orientationEvent);\n}\nfunction bindOrientationEvent(callback) {\n unbindOrientationEvent();\n $$1(window).bind(orientationEvent, callback);\n}\nfunction requestFullscreenNative(e) {\n e = e || document.documentElement;\n e[browser.requestFullscreen]();\n}\nfunction exitFullscreen() {\n return document[browser.exitFullscreen]();\n}\nfunction fullscreenEnabled() {\n return document[browser.fullscreenEnabled];\n}\nfunction fullscreenElement() {\n return document[browser.fullscreenElement];\n}\nfunction isFullscreen() {\n return !!fullscreenElement();\n}\nfunction toggleFullscreen(data, opts) {\n if (isFullscreen()) {\n this.apiRequestFullscreen(opts);\n }\n else {\n this.exitFullscreen();\n }\n}\nfunction requestFullscreen(data, opts) {\n opts = opts || {};\n var oWidth = data.width;\n var oHeight = data.height;\n var oSource = data.source;\n var oSize = data.sizeMode;\n var oResponsive = data.responsive;\n var enter = function () {\n data.width = window.screen.width;\n data.height = window.screen.height;\n data.source = (opts.source || oSource);\n data.sizeMode = opts.sizeMode || 'fit';\n data.responsive = false;\n boot(data);\n };\n var exit = function () {\n data.width = oWidth;\n data.height = oHeight;\n data.source = oSource;\n data.sizeMode = oSize;\n data.responsive = oResponsive;\n boot(data);\n };\n bindChangeEvent(function () {\n if (isFullscreen()) {\n enter();\n bindOrientationEvent(enter);\n }\n else {\n unbindChangeEvent();\n unbindOrientationEvent();\n exit();\n }\n });\n requestFullscreenNative(data.target[0]);\n}\nextendApi({\n fullscreenEnabled: fullscreenEnabled,\n fullscreenElement: fullscreenElement,\n exitFullscreen: exitFullscreen,\n toggleFullscreen: function (opts) {\n toggleFullscreen(this.data, opts);\n },\n requestFullscreen: function (opts) {\n requestFullscreen(this.data, opts);\n }\n});\n\n(function () {\n var NAME = 'click';\n function click(e, data) {\n if (data.loading || !data.stage.is(':visible')) {\n return;\n }\n updateInput(e, data);\n var input = getInputState(data);\n var half, pos;\n var target = data.target, offset = target.offset();\n if (data.orientation === 'horizontal') {\n half = target.innerWidth() / 2;\n pos = input.currentX - offset.left;\n }\n else {\n half = target.innerHeight() / 2;\n pos = input.currentY - offset.top;\n }\n updateFrame(data, data.frame + (pos > half ? 1 : -1));\n }\n registerPlugin(NAME, {\n name: NAME,\n mouseup: click,\n touchend: click\n });\n})();\n\n(function () {\n var NAME = 'drag';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getAxis(data) {\n if (typeof data.orientation === 'number') {\n return data.orientation * Math.PI / 180;\n }\n if (data.orientation === 'horizontal') {\n return 0;\n }\n return Math.PI / 2;\n }\n function onInit(e, data) {\n var state = getState$$1(data);\n var d = [200, 1500];\n var t = data.touchScrollTimer || d;\n state.minTime = t[0] || d[0];\n state.maxTime = t[1] || d[1];\n }\n function dragStart(e, data) {\n var state = getState$$1(data);\n if (data.loading || is(data, 'dragging') || data['zoomPinFrame'] && !data.stage.is(':visible')) {\n return;\n }\n // Touch scroll can only be disabled by cancelling the 'touchstart' event.\n // If we would try to cancel the 'touchmove' event during a scroll\n // chrome browser raises an error\n //\n // When a user interacts with sprite spin, we don't know whether the intention\n // is to scroll the page or to roll the spin.\n //\n // On first interaction with SpriteSpin the scroll is not disabled\n // On double tap within 200ms the scroll is not disabled\n // Scroll is only disabled if there was an interaction with SpriteSpin in the past 1500ms\n var now = new Date().getTime();\n if (state.endAt && (now - state.endAt > state.maxTime)) {\n // reset timer if the user has no interaction with spritespin within 1500ms\n state.startAt = null;\n state.endAt = null;\n }\n if (state.startAt && (now - state.startAt > state.minTime)) {\n // disable scroll only if there was already an interaction with spritespin\n // however, allow scrolling on double tab within 200ms\n e.preventDefault();\n }\n state.startAt = now;\n state.wasPlaying = !!getPlaybackState(data).handler;\n state.frame = data.frame || 0;\n state.lane = data.lane || 0;\n flag(data, 'dragging', true);\n updateInput(e, data);\n }\n function dragEnd(e, data) {\n if (is(data, 'dragging')) {\n getState$$1(data).endAt = new Date().getTime();\n flag(data, 'dragging', false);\n resetInput(data);\n if (data.retainAnimate && getState$$1(data).wasPlaying) {\n startAnimation(data);\n }\n }\n }\n function drag(e, data) {\n var state = getState$$1(data);\n var input = getInputState(data);\n if (!is(data, 'dragging')) {\n return;\n }\n updateInput(e, data);\n var rad = getAxis(data);\n var sn = Math.sin(rad);\n var cs = Math.cos(rad);\n var x = ((input.nddX * cs - input.nddY * sn) * data.sense) || 0;\n var y = ((input.nddX * sn + input.nddY * cs) * (data.senseLane || data.sense)) || 0;\n // accumulate\n state.frame += data.frames * x;\n state.lane += data.lanes * y;\n // update spritespin\n var oldFrame = data.frame;\n var oldLane = data.lane;\n updateFrame(data, Math.floor(state.frame), Math.floor(state.lane));\n stopAnimation(data);\n }\n function mousemove(e, data) {\n dragStart(e, data);\n drag(e, data);\n }\n registerPlugin('drag', {\n name: 'drag',\n onInit: onInit,\n mousedown: dragStart,\n mousemove: drag,\n mouseup: dragEnd,\n documentmousemove: drag,\n documentmouseup: dragEnd,\n touchstart: dragStart,\n touchmove: drag,\n touchend: dragEnd,\n touchcancel: dragEnd\n });\n registerPlugin('move', {\n name: 'move',\n onInit: onInit,\n mousemove: mousemove,\n mouseleave: dragEnd,\n touchstart: dragStart,\n touchmove: drag,\n touchend: dragEnd,\n touchcancel: dragEnd\n });\n})();\n\n(function () {\n var NAME = 'hold';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function rememberOptions(data) {\n var state = getState$$1(data);\n state.frameTime = data.frameTime;\n state.animate = data.animate;\n state.reverse = data.reverse;\n }\n function restoreOptions(data) {\n var state = getState$$1(data);\n data.frameTime = state.frameTime;\n data.animate = state.animate;\n data.reverse = state.reverse;\n }\n function start(e, data) {\n if (is(data, 'loading') || is(data, 'dragging') || !data.stage.is(':visible')) {\n return;\n }\n rememberOptions(data);\n updateInput(e, data);\n flag(data, 'dragging', true);\n data.animate = true;\n applyAnimation(data);\n }\n function stop(e, data) {\n flag(data, 'dragging', false);\n resetInput(data);\n stopAnimation(data);\n restoreOptions(data);\n applyAnimation(data);\n }\n function update(e, data) {\n if (!is(data, 'dragging')) {\n return;\n }\n updateInput(e, data);\n var input = getInputState(data);\n var half, delta;\n var target = data.target, offset = target.offset();\n if (data.orientation === 'horizontal') {\n half = target.innerWidth() / 2;\n delta = (input.currentX - offset.left - half) / half;\n }\n else {\n half = (data.height / 2);\n delta = (input.currentY - offset.top - half) / half;\n }\n data.reverse = delta < 0;\n delta = delta < 0 ? -delta : delta;\n data.frameTime = 80 * (1 - delta) + 20;\n if (((data.orientation === 'horizontal') && (input.dX < input.dY)) ||\n ((data.orientation === 'vertical') && (input.dX < input.dY))) {\n e.preventDefault();\n }\n }\n function onFrame(e, data) {\n data.animate = true;\n applyAnimation(data);\n }\n registerPlugin(NAME, {\n name: NAME,\n mousedown: start,\n mousemove: update,\n mouseup: stop,\n mouseleave: stop,\n touchstart: start,\n touchmove: update,\n touchend: stop,\n touchcancel: stop,\n onFrame: onFrame\n });\n})();\n\n(function () {\n var NAME = 'swipe';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function init(e, data) {\n var state = getState$$1(data);\n state.fling = getOption(data, 'swipeFling', 10);\n state.snap = getOption(data, 'swipeSnap', 0.50);\n }\n function start(e, data) {\n if (!data.loading && !is(data, 'dragging')) {\n updateInput(e, data);\n flag(data, 'dragging', true);\n }\n }\n function update(e, data) {\n if (!is(data, 'dragging')) {\n return;\n }\n updateInput(e, data);\n var frame = data.frame;\n var lane = data.lane;\n updateFrame(data, frame, lane);\n }\n function end(e, data) {\n if (!is(data, 'dragging')) {\n return;\n }\n flag(data, 'dragging', false);\n var state = getState$$1(data);\n var input = getInputState(data);\n var frame = data.frame;\n var lane = data.lane;\n var snap = state.snap;\n var fling = state.fling;\n var dS, dF;\n if (data.orientation === 'horizontal') {\n dS = input.ndX;\n dF = input.ddX;\n }\n else {\n dS = input.ndY;\n dF = input.ddY;\n }\n if (dS >= snap || dF >= fling) {\n frame = data.frame - 1;\n }\n else if (dS <= -snap || dF <= -fling) {\n frame = data.frame + 1;\n }\n resetInput(data);\n updateFrame(data, frame, lane);\n stopAnimation(data);\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n mousedown: start,\n mousemove: update,\n mouseup: end,\n mouseleave: end,\n touchstart: start,\n touchmove: update,\n touchend: end,\n touchcancel: end\n });\n})();\n\n(function () {\n var NAME = 'wheel';\n function wheel(e, data) {\n if (!data.loading && data.stage.is(':visible')) {\n e.preventDefault();\n var we = e.originalEvent;\n var signX = we.deltaX === 0 ? 0 : we.deltaX > 0 ? 1 : -1;\n var signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1;\n updateFrame(data, data.frame + signY, data.lane + signX);\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n wheel: wheel\n });\n})();\n\n(function () {\n var template = \"\\n
    \\n
    \\n
    \\n
    \\n\";\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n var NAME = 'progress';\n function onInit(e, data) {\n var state = getState$$1(data);\n if (!state.stage) {\n state.stage = $$1(template);\n state.stage.appendTo(data.target);\n }\n state.stage.find('.spritespin-progress-label')\n .text(\"0%\")\n .css({ 'text-align': 'center' });\n state.stage.find('.spritespin-progress-bar').css({\n width: \"0%\"\n });\n state.stage.hide().fadeIn();\n }\n function onProgress(e, data) {\n var state = getState$$1(data);\n state.stage.find('.spritespin-progress-label')\n .text(data.progress.percent + \"%\")\n .css({ 'text-align': 'center' });\n state.stage.find('.spritespin-progress-bar').css({\n width: data.progress.percent + \"%\"\n });\n }\n function onLoad(e, data) {\n $$1(getState$$1(data).stage).fadeOut();\n }\n function onDestroy(e, data) {\n $$1(getState$$1(data).stage).remove();\n }\n registerPlugin(NAME, {\n name: NAME,\n onInit: onInit,\n onProgress: onProgress,\n onLoad: onLoad,\n onDestroy: onDestroy\n });\n})();\n\n(function () {\n var NAME = '360';\n function onLoad(e, data) {\n data.stage.find('.spritespin-frames').detach();\n if (data.renderer === 'image') {\n $(data.images).addClass('spritespin-frames').appendTo(data.stage);\n }\n }\n function onDraw(e, data) {\n var specs = findSpecs(data.metrics, data.frames, data.frame, data.lane);\n var sheet = specs.sheet;\n var sprite = specs.sprite;\n if (!sheet || !sprite) {\n return;\n }\n var src = data.source[sheet.id];\n var image = data.images[sheet.id];\n if (data.renderer === 'canvas') {\n data.canvas.show();\n var w = data.canvas[0].width / data.canvasRatio;\n var h = data.canvas[0].height / data.canvasRatio;\n data.context.clearRect(0, 0, w, h);\n data.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h);\n return;\n }\n var scaleX = data.stage.innerWidth() / sprite.sampledWidth;\n var scaleY = data.stage.innerHeight() / sprite.sampledHeight;\n var top = Math.floor(-sprite.sampledY * scaleY);\n var left = Math.floor(-sprite.sampledX * scaleX);\n var width = Math.floor(sheet.sampledWidth * scaleX);\n var height = Math.floor(sheet.sampledHeight * scaleY);\n if (data.renderer === 'background') {\n data.stage.css({\n 'background-image': \"url('\" + src + \"')\",\n 'background-position': left + \"px \" + top + \"px\",\n 'background-repeat': 'no-repeat',\n // set custom background size to enable responsive rendering\n '-webkit-background-size': width + \"px \" + height + \"px\",\n '-moz-background-size': width + \"px \" + height + \"px\",\n '-o-background-size': width + \"px \" + height + \"px\",\n 'background-size': width + \"px \" + height + \"px\" /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n });\n return;\n }\n $(data.images).hide();\n $(image).show().css({\n position: 'absolute',\n top: top,\n left: left,\n 'max-width': 'initial',\n width: width,\n height: height\n });\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: onLoad,\n onDraw: onDraw\n });\n})();\n\n(function () {\n var NAME = 'blur';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function init(e, data) {\n var state = getState$$1(data);\n state.canvas = state.canvas || $$1(\"\");\n state.context = state.context || state.canvas[0].getContext('2d');\n state.steps = state.steps || [];\n state.fadeTime = Math.max(getOption(data, 'blurFadeTime', 200), 1);\n state.frameTime = Math.max(getOption(data, 'blurFrameTime', data.frameTime), 16);\n state.trackTime = null;\n state.cssBlur = !!getOption(data, 'blurCss', false);\n var inner = getInnerSize(data);\n var outer = data.responsive ? getComputedSize(data) : getOuterSize(data);\n var css = getInnerLayout(data.sizeMode, inner, outer);\n state.canvas[0].width = data.width * data.canvasRatio;\n state.canvas[0].height = data.height * data.canvasRatio;\n state.canvas.css(css).show();\n state.context.scale(data.canvasRatio, data.canvasRatio);\n data.target.append(state.canvas);\n }\n function onFrame(e, data) {\n var state = getState$$1(data);\n trackFrame(data);\n if (state.timeout == null) {\n loop(data);\n }\n }\n function trackFrame(data) {\n var state = getState$$1(data);\n var ani = getPlaybackState(data);\n // distance between frames\n var d = Math.abs(data.frame - ani.lastFrame);\n // shortest distance\n d = d >= data.frames / 2 ? data.frames - d : d;\n state.steps.unshift({\n frame: data.frame,\n lane: data.lane,\n live: 1,\n step: state.frameTime / state.fadeTime,\n d: d,\n alpha: 0\n });\n }\n var toRemove = [];\n function removeOldFrames(frames) {\n toRemove.length = 0;\n for (var i = 0; i < frames.length; i += 1) {\n if (frames[i].alpha <= 0) {\n toRemove.push(i);\n }\n }\n for (var _i = 0, toRemove_1 = toRemove; _i < toRemove_1.length; _i++) {\n var item = toRemove_1[_i];\n frames.splice(item, 1);\n }\n }\n function loop(data) {\n var state = getState$$1(data);\n state.timeout = window.setTimeout(function () { tick(data); }, state.frameTime);\n }\n function killLoop(data) {\n var state = getState$$1(data);\n window.clearTimeout(state.timeout);\n state.timeout = null;\n }\n function applyCssBlur(canvas, d) {\n var amount = Math.min(Math.max((d / 2) - 4, 0), 2.5);\n var blur = \"blur(\" + amount + \"px)\";\n canvas.css({\n '-webkit-filter': blur,\n filter: blur\n });\n }\n function clearFrame(data, state) {\n state.canvas.show();\n var w = state.canvas[0].width / data.canvasRatio;\n var h = state.canvas[0].height / data.canvasRatio;\n // state.context.clearRect(0, 0, w, h)\n }\n function drawFrame(data, state, step) {\n if (step.alpha <= 0) {\n return;\n }\n var specs = findSpecs(data.metrics, data.frames, step.frame, step.lane);\n var sheet = specs.sheet;\n var sprite = specs.sprite;\n if (!sheet || !sprite) {\n return;\n }\n var src = data.source[sheet.id];\n var image = data.images[sheet.id];\n if (image.complete === false) {\n return;\n }\n state.canvas.show();\n var w = state.canvas[0].width / data.canvasRatio;\n var h = state.canvas[0].height / data.canvasRatio;\n state.context.globalAlpha = step.alpha;\n state.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h);\n }\n function tick(data) {\n var state = getState$$1(data);\n killLoop(data);\n if (!state.context) {\n return;\n }\n var d = 0;\n clearFrame(data, state);\n state.context.clearRect(0, 0, data.width, data.height);\n for (var _i = 0, _a = state.steps; _i < _a.length; _i++) {\n var step = _a[_i];\n step.live = Math.max(step.live - step.step, 0);\n step.alpha = Math.max(step.live - 0.25, 0);\n drawFrame(data, state, step);\n d += step.alpha + step.d;\n }\n if (state.cssBlur) {\n applyCssBlur(state.canvas, d);\n }\n removeOldFrames(state.steps);\n if (state.steps.length) {\n loop(data);\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n onFrameChanged: onFrame\n });\n})();\n\n(function () {\n var max = Math.max;\n var min = Math.min;\n var NAME = 'ease';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function init(e, data) {\n var state = getState$$1(data);\n state.maxSamples = max(getOption(data, 'easeMaxSamples', 5), 0);\n state.damping = max(min(getOption(data, 'easeDamping', 0.9), 0.999), 0);\n state.abortTime = max(getOption(data, 'easeAbortTime', 250), 16);\n state.updateTime = max(getOption(data, 'easeUpdateTime', data.frameTime), 16);\n state.samples = [];\n state.steps = [];\n }\n function update(e, data) {\n if (is(data, 'dragging')) {\n killLoop(data);\n sampleInput(data);\n }\n }\n function end(e, data) {\n var state = getState$$1(data);\n var samples = state.samples;\n var last;\n var lanes = 0;\n var frames = 0;\n var time = 0;\n for (var _i = 0, samples_1 = samples; _i < samples_1.length; _i++) {\n var sample = samples_1[_i];\n if (!last) {\n last = sample;\n continue;\n }\n var dt = sample.time - last.time;\n if (dt > state.abortTime) {\n lanes = frames = time = 0;\n return killLoop(data);\n }\n frames += sample.frame - last.frame;\n lanes += sample.lane - last.lane;\n time += dt;\n last = sample;\n }\n samples.length = 0;\n if (!time) {\n return;\n }\n state.lane = data.lane;\n state.lanes = 0;\n state.laneStep = lanes / time * state.updateTime;\n state.frame = data.frame;\n state.frames = 0;\n state.frameStep = frames / time * state.updateTime;\n loop(data);\n }\n function sampleInput(data) {\n var state = getState$$1(data);\n // add a new sample\n state.samples.push({\n time: new Date().getTime(),\n frame: data.frame,\n lane: data.lane\n });\n // drop old samples\n while (state.samples.length > state.maxSamples) {\n state.samples.shift();\n }\n }\n function killLoop(data) {\n var state = getState$$1(data);\n if (state.handler != null) {\n window.clearTimeout(state.handler);\n state.handler = null;\n }\n }\n function loop(data) {\n var state = getState$$1(data);\n state.handler = window.setTimeout(function () { tick(data); }, state.updateTime);\n }\n function tick(data) {\n var state = getState$$1(data);\n state.lanes += state.laneStep;\n state.frames += state.frameStep;\n state.laneStep *= state.damping;\n state.frameStep *= state.damping;\n var frame = Math.floor(state.frame + state.frames);\n var lane = Math.floor(state.lane + state.lanes);\n updateFrame(data, frame, lane);\n if (is(data, 'dragging')) {\n killLoop(data);\n }\n else if (Math.abs(state.frameStep) > 0.005 || Math.abs(state.laneStep) > 0.005) {\n loop(data);\n }\n else {\n killLoop(data);\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: init,\n mousemove: update,\n mouseup: end,\n mouseleave: end,\n touchmove: update,\n touchend: end,\n touchcancel: end\n });\n})();\n\n(function () {\n var NAME = 'gallery';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return data[name] || fallback;\n }\n function load(e, data) {\n var state = getState$$1(data);\n state.images = [];\n state.offsets = [];\n state.frame = data.frame;\n state.speed = getOption(data, 'gallerySpeed', 500);\n state.opacity = getOption(data, 'galleryOpacity', 0.25);\n state.stage = getOption(data, 'galleryStage', $$1('
    '));\n state.stage.empty().addClass('gallery-stage').prependTo(data.stage);\n var size = 0;\n for (var _i = 0, _a = data.images; _i < _a.length; _i++) {\n var image = _a[_i];\n var naturalSize$$1 = naturalSize(image);\n var scale = data.height / naturalSize$$1.height;\n var img = $$1(image);\n state.stage.append(img);\n state.images.push(img);\n state.offsets.push(-size + (data.width - image.width * scale) / 2);\n size += data.width;\n img.css({\n 'max-width': 'initial',\n opacity: state.opacity,\n width: data.width,\n height: data.height\n });\n }\n var innerSize = getInnerSize(data);\n var outerSize = data.responsive ? getComputedSize(data) : getOuterSize(data);\n var layout = getInnerLayout(data.sizeMode, innerSize, outerSize);\n state.stage.css(layout).css({ width: size, left: state.offsets[state.frame] });\n state.images[state.frame].animate({ opacity: 1 }, { duration: state.speed });\n }\n function draw(e, data) {\n var state = getState$$1(data);\n var input = getInputState(data);\n var isDragging = is(data, 'dragging');\n if (state.frame !== data.frame && !isDragging) {\n state.stage.stop(true, false).animate({ left: state.offsets[data.frame] }, { duration: state.speed });\n state.images[state.frame].animate({ opacity: state.opacity }, { duration: state.speed });\n state.frame = data.frame;\n state.images[state.frame].animate({ opacity: 1 }, { duration: state.speed });\n state.stage.animate({ left: state.offsets[state.frame] });\n }\n else if (isDragging || state.dX !== input.dX) {\n state.dX = input.dX;\n state.ddX = input.ddX;\n state.stage.stop(true, true).css({ left: state.offsets[state.frame] + state.dX });\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: load,\n onDraw: draw\n });\n})();\n\n(function () {\n var NAME = 'panorama';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function onLoad(e, data) {\n var state = getState$$1(data);\n var sprite = data.metrics[0];\n if (!sprite) {\n return;\n }\n if (data.orientation === 'horizontal') {\n state.scale = data.target.innerHeight() / sprite.sampledHeight;\n data.frames = sprite.sampledWidth;\n }\n else {\n state.scale = data.target.innerWidth() / sprite.sampledWidth;\n data.frames = sprite.sampledHeight;\n }\n var width = Math.floor(sprite.sampledWidth * state.scale);\n var height = Math.floor(sprite.sampledHeight * state.scale);\n data.stage.css({\n 'background-image': \"url(\" + data.source[sprite.id] + \")\",\n 'background-repeat': 'repeat-both',\n // set custom background size to enable responsive rendering\n '-webkit-background-size': width + \"px \" + height + \"px\",\n '-moz-background-size': width + \"px \" + height + \"px\",\n '-o-background-size': width + \"px \" + height + \"px\",\n 'background-size': width + \"px \" + height + \"px\" /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n });\n }\n function onDraw(e, data) {\n var state = getState$$1(data);\n var px = data.orientation === 'horizontal' ? 1 : 0;\n var py = px ? 0 : 1;\n var offset = data.frame % data.frames;\n var left = Math.round(px * offset * state.scale);\n var top = Math.round(py * offset * state.scale);\n data.stage.css({ 'background-position': left + \"px \" + top + \"px\" });\n }\n registerPlugin(NAME, {\n name: NAME,\n onLoad: onLoad,\n onDraw: onDraw\n });\n})();\n\n(function () {\n var NAME = 'zoom';\n function getState$$1(data) {\n return getPluginState(data, NAME);\n }\n function getOption(data, name, fallback) {\n return name in data ? data[name] : fallback;\n }\n function onInit(e, data) {\n var state = getState$$1(data);\n state.source = getOption(data, 'zoomSource', data.source);\n state.useWheel = getOption(data, 'zoomUseWheel', false);\n state.useClick = getOption(data, 'zoomUseClick', true);\n state.pinFrame = getOption(data, 'zoomPinFrame', true);\n state.doubleClickTime = getOption(data, 'zoomDoubleClickTime', 500);\n state.stage = state.stage || $$1(\"
    \");\n state.stage.css({\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n position: 'absolute'\n })\n .appendTo(data.target)\n .hide();\n }\n function onDestroy(e, data) {\n var state = getState$$1(data);\n if (state.stage) {\n state.stage.remove();\n delete state.stage;\n }\n }\n function updateInput$$1(e, data) {\n var state = getState$$1(data);\n if (!state.stage.is(':visible')) {\n return;\n }\n e.preventDefault();\n if (state.pinFrame) {\n // hack into drag/move module and disable dragging\n // prevents frame change during zoom mode\n flag(data, 'dragging', false);\n }\n // grab touch/cursor position\n var cursor = getCursorPosition(e);\n // normalize cursor position into [0:1] range\n var x = cursor.x / data.width;\n var y = cursor.y / data.height;\n if (state.oldX == null) {\n state.oldX = x;\n state.oldY = y;\n }\n if (state.currentX == null) {\n state.currentX = x;\n state.currentY = y;\n }\n // calculate move delta since last frame and remember current position\n var dx = x - state.oldX;\n var dy = y - state.oldY;\n state.oldX = x;\n state.oldY = y;\n // invert drag direction for touch events to enable 'natural' scrolling\n if (e.type.match(/touch/)) {\n dx = -dx;\n dy = -dy;\n }\n // accumulate display coordinates\n state.currentX = clamp(state.currentX + dx, 0, 1);\n state.currentY = clamp(state.currentY + dy, 0, 1);\n updateFrame(data, data.frame, data.lane);\n }\n function onClick(e, data) {\n var state = getState$$1(data);\n if (!state.useClick) {\n return;\n }\n e.preventDefault();\n // simulate double click\n var clickTime = new Date().getTime();\n if (!state.clickTime) {\n // on first click\n state.clickTime = clickTime;\n return;\n }\n // on second click\n var timeDelta = clickTime - state.clickTime;\n if (timeDelta > state.doubleClickTime) {\n // took too long, back to first click\n state.clickTime = clickTime;\n return;\n }\n // on valid double click\n state.clickTime = undefined;\n if (toggleZoom(data)) {\n updateInput$$1(e, data);\n }\n }\n function onMove(e, data) {\n var state = getState$$1(data);\n if (state.stage.is(':visible')) {\n updateInput$$1(e, data);\n }\n }\n function onDraw(e, data) {\n var state = getState$$1(data);\n // calculate the frame index\n var index = data.lane * data.frames + data.frame;\n // get the zoom image. Use original frames as fallback. This won't work for sprite sheets\n var source = state.source[index];\n var spec = findSpecs(data.metrics, data.frames, data.frame, data.lane);\n // get display position\n var x = state.currentX;\n var y = state.currentY;\n // fallback to centered position\n if (x == null) {\n x = state.currentX = 0.5;\n y = state.currentY = 0.5;\n }\n if (source) {\n // scale up from [0:1] to [0:100] range\n x = Math.floor(x * 100);\n y = Math.floor(y * 100);\n // update background image and position\n state.stage.css({\n 'background-repeat': 'no-repeat',\n 'background-image': \"url('\" + source + \"')\",\n 'background-position': x + \"% \" + y + \"%\"\n });\n }\n else if (spec.sheet && spec.sprite) {\n var sprite = spec.sprite;\n var sheet = spec.sheet;\n var src = data.source[sheet.id];\n var left = -Math.floor(sprite.sampledX + x * (sprite.sampledWidth - data.width));\n var top_1 = -Math.floor(sprite.sampledY + y * (sprite.sampledHeight - data.height));\n var width = sheet.sampledWidth;\n var height = sheet.sampledHeight;\n state.stage.css({\n 'background-image': \"url('\" + src + \"')\",\n 'background-position': left + \"px \" + top_1 + \"px\",\n 'background-repeat': 'no-repeat',\n // set custom background size to enable responsive rendering\n '-webkit-background-size': width + \"px \" + height + \"px\",\n '-moz-background-size': width + \"px \" + height + \"px\",\n '-o-background-size': width + \"px \" + height + \"px\",\n 'background-size': width + \"px \" + height + \"px\" /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */\n });\n }\n }\n function toggleZoom(data) {\n var state = getState$$1(data);\n if (!state.stage) {\n throw new Error('zoom module is not initialized or is not available.');\n }\n if (state.stage.is(':visible')) {\n showZoom(data);\n }\n else {\n hideZoom(data);\n return true;\n }\n return false;\n }\n function showZoom(data) {\n var state = getState$$1(data);\n state.stage.fadeOut();\n data.stage.fadeIn();\n }\n function hideZoom(data) {\n var state = getState$$1(data);\n state.stage.fadeIn();\n data.stage.fadeOut();\n }\n function wheel(e, data) {\n var state = getState$$1(data);\n if (!data.loading && state.useWheel) {\n var we = e.originalEvent;\n var signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1;\n if (typeof state.useWheel === 'number') {\n signY *= state.useWheel;\n }\n if (state.stage.is(':visible') && signY > 0) {\n e.preventDefault();\n showZoom(data);\n }\n if (!state.stage.is(':visible') && signY < 0) {\n e.preventDefault();\n hideZoom(data);\n }\n }\n }\n registerPlugin(NAME, {\n name: NAME,\n mousedown: onClick,\n touchstart: onClick,\n mousemove: onMove,\n touchmove: onMove,\n wheel: wheel,\n onInit: onInit,\n onDestroy: onDestroy,\n onDraw: onDraw\n });\n extendApi({\n toggleZoom: function () { toggleZoom(this.data); } // tslint:disable-line\n });\n})();\n\nvar Utils = {\n $: $$1,\n bind: bind,\n clamp: clamp,\n detectSubsampling: detectSubsampling,\n error: error,\n findSpecs: findSpecs,\n getComputedSize: getComputedSize,\n getCursorPosition: getCursorPosition,\n getInnerLayout: getInnerLayout,\n getInnerSize: getInnerSize,\n getOuterSize: getOuterSize,\n isFunction: isFunction,\n log: log,\n measure: measure,\n naturalSize: naturalSize,\n noop: noop$1,\n pixelRatio: pixelRatio,\n preload: preload,\n prevent: prevent,\n sourceArray: sourceArray,\n toArray: toArray,\n unbind: unbind,\n warn: warn,\n wrap: wrap\n};\n\nexports.Utils = Utils;\nexports.sourceArray = sourceArray;\nexports.Api = Api;\nexports.extendApi = extendApi;\nexports.instances = instances;\nexports.applyEvents = applyEvents;\nexports.boot = boot;\nexports.create = create;\nexports.createOrUpdate = createOrUpdate;\nexports.destroy = destroy;\nexports.namespace = namespace;\nexports.eventNames = eventNames;\nexports.callbackNames = callbackNames;\nexports.eventsToPrevent = eventsToPrevent;\nexports.defaults = defaults;\nexports.getInputState = getInputState;\nexports.updateInput = updateInput;\nexports.resetInput = resetInput;\nexports.applyLayout = applyLayout;\nexports.getPlaybackState = getPlaybackState;\nexports.updateFrame = updateFrame;\nexports.stopAnimation = stopAnimation;\nexports.applyAnimation = applyAnimation;\nexports.startAnimation = startAnimation;\nexports.registerPlugin = registerPlugin;\nexports.registerModule = registerModule;\nexports.getPlugin = getPlugin;\nexports.applyPlugins = applyPlugins;\nexports.getState = getState;\nexports.getPluginState = getPluginState;\nexports.is = is;\nexports.flag = flag;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=spritespin.js.map\n","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n * jquery.ui.widget.js\n * jquery.ui.mouse.js\n */\n!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent(\"MouseEvents\");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch=\"ontouchend\"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,\"mouseover\"),f(a,\"mousemove\"),f(a,\"mousedown\"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,\"mousemove\"))},b._touchEnd=function(a){e&&(f(a,\"mouseup\"),f(a,\"mouseout\"),this._touchMoved||f(a,\"click\"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,\"_touchStart\"),touchmove:a.proxy(b,\"_touchMove\"),touchend:a.proxy(b,\"_touchEnd\")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,\"_touchStart\"),touchmove:a.proxy(b,\"_touchMove\"),touchend:a.proxy(b,\"_touchEnd\")}),d.call(b)}}}(jQuery);"]}