{"version":3,"sources":["marathon-app.js","sampleController.js","carousel/carousel-controller.js","carousel/carousel.js","common/filters.js","common/helpers.js","events.js","exists.js","extensions.js","getUrlVars.js","jquery-validate-rules.js"],"names":["$","Signal","window","GRGEvents","SIG_GoogleMapsLoaded","SIG_FavoritedPropertiesChanged","SIG_FAQSearchResultClicked","SIG_FAQSearchAutocompleteOpen","jQuery","signals","fn","exists","this","length","GRGExtensions","minimumStartBookDays","maximumStartBookDays","defaultSearchEndDays","bindRangeSlider","sliderItemIdentifier","sliderOptions","options","defaultValues","bindSlider","$sliderEle","console","log","Slider","on","data","initialValues","getValue","updatedCallbackFunction","isSingleValue","resize","sliderElement","resetValues","setValue","setDirtyCallbackFunction","formatShortCurrency","input","toFixed","calculate12HoursFrom24Hours","hour","minutes","amppm","timePieces","split","GoogleMapsHelper","createMarker","width","height","title","imgMarker","fontStyle","position","canvas","context","dataUrl","document","createElement","getContext","clearRect","drawImage","font","textAlign","fillStyle","fillText","toDataURL","zoomToMiles","zoom","radiusMileKeys","i","calculateDistance","lat1","lon1","lat2","lon2","unit","radlat1","Math","PI","radlat2","theta","radtheta","dist","sin","cos","acos","EventHelper","fireOnMapsLoaded","callback","google_map_loaded","add","BindLocationsAutocomplete","$locationHolder","each","$currentLocationInput","find","$stateInput","autocomplete","source","minLength","select","e","ui","val","item","state","location","url","BindGoogleAutocomplete","$parentHolder","closest","types","componentRestrictions","country","googleAutocompleteCountryRestrictions","google","maps","places","Autocomplete","keyup","blur","removeClass","addClass","event","addListener","place","getPlace","geometry","searchUrl","searchUrlHelper","rebuildUrlFriendlyLocationName","href","$currentInput","removeAttr","getTodaysDate","today","Date","dd","getDate","mm","getMonth","yyyy","getFullYear","getTomorrowsDate","setDate","getDateFromString","date_string","myDate","indexOf","parts","getDateStringFromDate","date_obj","returnString","year","month","padNumber","day","number","ret","String","getMinimumStartDate","returnAsString","minStartDate","getMaximumStartDate","maxStartDate","getDefaultEndDate","startDateString","defaultEndDate","given_location","searchSegments","city","replaceProvinceAbbreviations","getUrlFriendlyLocationName","toLowerCase","googleAutocompleteCountryRedirectMapValue","j","provinceAbbreviation","provinceAbbreviationUppercase","trim","toUpperCase","stateName","buildSearchUrlFromExternal","locationName","replaceAll","getUrlFriendlyStartEndDates","given_startDate","given_endDate","dates","replace","getLocationNameFromUrl","getStartOrEndDateFromUrl","returnDate","getUrlParametersAsObject","substr","province","returnVal","rawUrlFilters","line","lval","myLineDataValues","subsetVal","scrollToElement","ele","_options","headerHeight","offset","afterElement","justCalculate","speed","distanceFromTop","top","scrollTop","scrollAmount","outerHeight","scroll","animate","scrollToElementTop","g_headerHeight","scrollToElementBottom","fixedOnScroll","$g_markerDom","$g_elementDom","g_offset","g_offset_bottom","g_minMaxScreenWidth","$g_domWidthToMatch","$g_endMarkerDom","g_relativeToParent","$markerDom","$elementDom","offset_bottom","minMaxScreenWidth","$domWidthToMatch","$endMarkerDom","relativeToParent","self","currentWidth","css","hasClass","offsetCalcFixed","offsetCalcNoFixed","setPosition","amtScrolled","offsetCalc","parent","init","dynamicSort","property","sortOrder","a","b","result","showModal","given_options","correctFixedDom","id","class","body","buttons","defaultCloseButton","modalSize","callbackRendered","handleLoadingImgLoaded","destroyOnClose","BSOptions","loadingInit","modalHtml","append","modal","imagesLoaded","remove","hideModal","validateRedirDomain","allowedDomains","redirUrl","validDomain","arrayAllowedDomains","i_domindex","getDomain","formsHelper","checkEmailExists","response","ResponseObject","JSON","parse","Success","Data","msg","Messages","bindPasswordHideShow","elementid","locationid","$location","after","click","preventDefault","$self","attr","$target","passwordHintService","bind","fieldName","frm","fieldElement","fieldId","passwordContainer","hintContainer","hintSteps","UpperCaseRegexp","RegExp","LowerCaseRegexp","NumberRegexp","SpecialRegexp","Password","match","cookiesHelper","getCookie","cookieName","Cookies","get","setCookie","set","favoritePropertiesHelper","myFavs","populateFavorites","isLoggedIn","PropertyDetailService","getFavoriteProperties","done","res","dispatch","fail","setDateTimePickerYearAriaLabel","setTimeout","expandBannersWithForm","$doms","$banner","windowWidth","innerWidth","bannerHeight","bannerHeightMobile","$content","contentHeight","$form","$formHeight","bufferOffset","buffer","adjusted","adjustedMobile","protocol_i","domain","front_parsed_url","temp","endslash_i","prototype","search","replacement","target","extend","getUrlVars","hash","vars","currentUrl","hashes","slice","push","getUrlVar","name","parseUrlVars","ready","validator","addMethod","value","element","optional"],"mappings":"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","file":"base.min.js","sourcesContent":["/*var marathonApp = angular.module('marathon', []);\r\n\r\n//Disabled debug info to provide significant performance boost\r\n//If you need debug info, open your dev tools and run this in the console window: angular.reloadWithDebugInfo();\r\nmarathonApp.config(['$compileProvider', '$locationProvider', function ($compileProvider, $locationProvider) {\r\n $compileProvider.debugInfoEnabled(false);\r\n $locationProvider.hashPrefix('');\r\n}]).service('UrlService', ['$http', '$q', function ($http, $q) {\r\n\r\n this.GetData = function (url, id) {\r\n var searchUrl = url + \"?id=\" + id;\r\n var deferred = $q.defer();\r\n $http.get(searchUrl).then(function (response) {\r\n deferred.resolve(response.data);\r\n });\r\n return deferred.promise;\r\n }\r\n}]);*/","/*marathonApp.controller('SampleController', ['$scope', '$sce', 'UrlService', '$location', '$timeout', function ($scope, $sce, UrlService, $location, $timeout) {\r\n\r\n $scope.items = []; //this will receive our response\r\n\r\n //ng-int function that takes in the ID of the ipublished content from the razor view \r\n $scope.init = function (id) {\r\n\r\n var endpoint = '/umbraco/surface/TeamMemberSurface/Get';\r\n\r\n UrlService.GetData(endpoint, id).then(function (response) {\r\n $scope.items = angular.copy(response.Filters);\r\n });\r\n };\r\n\r\n $scope.$watch('variableName', function (nv, ov) {\r\n // return out of the func early if the old value equals the new value after the digest cycle\r\n if (nv === ov) return;\r\n\r\n //Normal watch code goes here\r\n\r\n $scope.$$postDigest(function () {\r\n //run this code as a callback after the current digest cycle completes\r\n });\r\n\r\n }, true); //true sets a 'deep' watch\r\n\r\n}]);*/","/*marathonApp.controller('CarouselController', ['$scope', '$sce', '$window', 'Helpers', function ($scope, $sce, $window, Helpers) {\r\n $scope.id = \"carousel\" + Helpers.guid().replace(/-/g, \"\");\r\n $scope.gallery;\r\n var currentIndex;\r\n var lastIndex;\r\n\r\n //Use ng-init to pass the server-side code into our controller\r\n $scope.init = function (json) {\r\n\r\n $scope.gallery = new Carousel(JSON.parse(json));\r\n\r\n $(function () {\r\n\r\n $scope.gallery.Current = $('#' + $scope.id);\r\n $scope.gallery.Modal = $('[data-carousel]').find('.modal');\r\n //displayModal(true);\r\n $scope.gallery.Current.carousel();\r\n\r\n var cHeight = 0;\r\n //Fires immediately when slide instance method is invoked\r\n $scope.gallery.Current.on('slide.bs.carousel', function (e) {\r\n\r\n var $nextImage = $(e.relatedTarget).find('img');\r\n\r\n $activeItem = $('.active.item', this);\r\n\r\n // prevents the slide decrease in height\r\n if (cHeight == 0) {\r\n cHeight = $(this).height();\r\n $activeItem.next('.item').height(cHeight);\r\n }\r\n\r\n // prevents the loaded image if it is already loaded\r\n var src = $nextImage.data('lazy-load-src');\r\n\r\n if (typeof src !== \"undefined\" && src != \"\") {\r\n $nextImage.attr('src', src)\r\n $nextImage.data('lazy-load-src', '');\r\n }\r\n });\r\n\r\n //Fires when the carousel has completed its slide transition\r\n $scope.gallery.Current.on('slid.bs.carousel', function (e) {\r\n\r\n });\r\n\r\n //Stop the carousel from cycling when the modal is closed\r\n $('#modal_' + $scope.id).on('hide.bs.modal', function (e) {\r\n cycleCarousel(false);\r\n });\r\n });\r\n }\r\n\r\n $scope.openCarousel = function (idx) {\r\n displayModal(true);\r\n $scope.changeSlide(idx);\r\n }\r\n\r\n $scope.previousSlide = function ($event) {\r\n $event.preventDefault();\r\n $scope.gallery.Current.carousel('prev');\r\n }\r\n\r\n $scope.nextSlide = function ($event) {\r\n $event.preventDefault();\r\n $scope.gallery.Current.carousel('next');\r\n }\r\n\r\n $scope.changeSlide = function (idx) {\r\n $scope.gallery.Current.carousel(idx);\r\n }\r\n\r\n var displayModal = function(showModal) {\r\n if (showModal) $scope.gallery.Modal.modal('show');\r\n else $scope.gallery.Modal.modal('hide');\r\n }\r\n\r\n var cycleCarousel = function(beginCycle) {\r\n if (beginCycle) $scope.gallery.Current.carousel('cycle');\r\n else $scope.gallery.Current.carousel('pause');\r\n }\r\n\r\n var carouselSlid = function () {\r\n\r\n }\r\n\r\n var carouselSlide = function () {\r\n \r\n }\r\n\r\n}]);\r\n*/","//Set up pseudoclassical pattern to attach methods to objects prototype and have the constructor included automatically\r\n/*\r\nvar Carousel = function (json) {\r\n this.Slides;\r\n this.TransitionSpeed;\r\n this.ShowSlideIndicators;\r\n this.Index;\r\n this.Current;\r\n this.Modal;\r\n this.Players = Array();\r\n\r\n for (var prop in json) {\r\n if (json.hasOwnProperty(prop)) this[prop] = json[prop];\r\n }\r\n}*/","/*marathonApp.filter('unsafe', ['$sce', function ($sce) { //For use with returning sanitized content through ng-bind-html \r\n return $sce.trustAsHtml;\r\n}]);*/","/*marathonApp.factory('Helpers', [function () {\r\n //Helper service\r\n var o = {\r\n Helpers: []\r\n };\r\n\r\n o.guid = function() {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n }\r\n\r\n //Other helpers can be added here\r\n\r\n return o;\r\n}]);*/","// Implementation Examples //\r\n// https://github.com/millermedeiros/js-signals/wiki/Examples //\r\n\r\n(function ($, Signal) {\r\n window.GRGEvents = {\r\n \r\n SIG_GoogleMapsLoaded: new Signal(),\r\n SIG_FavoritedPropertiesChanged: new Signal(),\r\n SIG_FAQSearchResultClicked: new Signal(),\r\n SIG_FAQSearchAutocompleteOpen: new Signal(),\r\n };\r\n})(jQuery, signals.Signal); ","//jQuery exists extension method\r\n//To use, call .exists() on any jQuery object or selector to see if it exists on the page\r\n//Sample Code: if ( $('.yourClass').exists() ) { //your code here }\r\n$.fn.exists = function () {\r\n return this.length !== 0;\r\n}","window.GRGExtensions = {\r\n minimumStartBookDays: 7,\r\n maximumStartBookDays: 30,\r\n defaultSearchEndDays: 6 * 30, //6 months if no end date given\r\n bindRangeSlider: function (sliderItemIdentifier, sliderOptions, options, defaultValues) {\r\n /*\r\n Text identifier we are binding on,\r\n JQuery element fromInput,\r\n JQuery element toInput,\r\n sliderOptions,\r\n options: {\r\n //if used requires 1 parameter, callback must accept 1 parameter\r\n updatedCallbackFunction: updatedCallbackFunction\r\n }\r\n\r\n */\r\n options = options || null;\r\n var $sliderEle = null;\r\n\r\n //bind instance\r\n function bindSlider() {\r\n if ($sliderEle === null) {\r\n // create the slider\r\n console.log(\"binding slider: \" + sliderItemIdentifier);\r\n $sliderEle = new Slider(sliderItemIdentifier, sliderOptions);\r\n\r\n $sliderEle.on(\"slideStop\",\r\n function (data) {\r\n // set the inital values\r\n var initialValues = $sliderEle.getValue();\r\n //setInputValues(data);\r\n //currentVal = data;\r\n //console.log(data);\r\n console.log(\"ON CHANGE: \" + sliderItemIdentifier);\r\n console.log(initialValues);\r\n console.log(options);\r\n if (options !== null && typeof (options.updatedCallbackFunction) !== 'undefined' &&\r\n options.updatedCallbackFunction !== null) {\r\n console.log(\"updating callback function 1\");\r\n options.updatedCallbackFunction([initialValues[0], initialValues[1]]);\r\n }\r\n\r\n if (options !== null && typeof (options.isSingleValue) !== 'undefined' &&\r\n options.isSingleValue !== null) {\r\n\r\n if (options.isSingleValue) {\r\n options.updatedCallbackFunction([0, initialValues]);\r\n } else {\r\n options.updatedCallbackFunction(initialValues);\r\n }\r\n }\r\n }\r\n );\r\n }\r\n else {\r\n //rerender\r\n $sliderEle.resize();\r\n }\r\n }\r\n bindSlider();\r\n return {\r\n sliderElement: $sliderEle,\r\n resetValues: function () {\r\n //reset when cleared\r\n //var currentVal = { newValue: [0, 100] };\r\n $sliderEle.setValue(defaultValues, true);\r\n\r\n if (options !== null && typeof (options.setDirtyCallbackFunction) !== 'undefined' &&\r\n options.setDirtyCallbackFunction !== null) {\r\n options.setDirtyCallbackFunction();\r\n }\r\n }\r\n\r\n };\r\n },\r\n formatShortCurrency: function (input) {\r\n return \"$\" + input.toFixed(0);\r\n },\r\n calculate12HoursFrom24Hours: function (input) {\r\n var calced = \"\";\r\n var hour = \"\";\r\n var minutes = \"\";\r\n var seconds = \"\"; //ignore\r\n var amppm = \"am\";\r\n //split :\r\n var timePieces = input.split(\":\");\r\n\r\n if (timePieces[0] * 1 > 12){\r\n hour = timePieces[0] * 1 - 12;\r\n amppm = \"pm\";\r\n }\r\n else {\r\n hour = timePieces[0] * 1;\r\n }\r\n //mins\r\n minutes = timePieces[1];\r\n if (minutes.length === 1) {\r\n minutes = minutes + \"0\";\r\n }\r\n\r\n return hour + \":\" + minutes + amppm;\r\n },\r\n GoogleMapsHelper: {\r\n //Must not be a .svg or IE11 will throw up\r\n createMarker: function (width, height, title, imgMarker, fontStyle, position) {\r\n var canvas, context, radius = 4;\r\n var dataUrl = \"\";\r\n canvas = document.createElement(\"canvas\");\r\n canvas.width = width;\r\n canvas.height = height;\r\n context = canvas.getContext(\"2d\");\r\n context.clearRect(0, 0, width, height);\r\n context.drawImage(imgMarker, 0, 0, width, height);\r\n context.font = fontStyle; //\"bold 10pt Arial\"\r\n context.textAlign = \"center\";\r\n context.fillStyle = \"rgb(255,255,255)\";\r\n context.fillText(title, position[0], position[1]);\r\n dataUrl = canvas.toDataURL(\"image/png\");\r\n return dataUrl;\r\n },\r\n zoomToMiles: function (zoom) {\r\n //values for 800px x 800px window\r\n var radiusMileKeys = [\r\n [20, 0.0837901798261496],\r\n [19, 0.16776417862393525],\r\n [18, 0.33552835213810533],\r\n [17, 0.6710567126564838],\r\n [16, 1.3421134197638334],\r\n [15, 2.6842268204119253],\r\n [14, 5.3684534872497265],\r\n [13, 10.736905740071133],\r\n [12, 21.473801606431724],\r\n [11, 42.94752422441664],\r\n [10, 85.77344290256586],\r\n [9, 171.7985926417136],\r\n [8, 343.4563966079052],\r\n [7, 685.6814737885826],\r\n [6, 1366.614350557506],\r\n [5, 2700.2763695609374],\r\n [4, 5230.647443560195],\r\n [3, 9078.639932879161],\r\n [2, 10919.753416970045],\r\n [1, 12285.05300779707]\r\n ];\r\n for (var i = 0; i < radiusMileKeys.length; i++) {\r\n //[0,1]\r\n if (radiusMileKeys[i][0] === zoom) {\r\n //\r\n return radiusMileKeys[i][1];\r\n }\r\n }\r\n },\r\n calculateDistance: function (lat1, lon1, lat2, lon2, unit) {\r\n var radlat1 = Math.PI * lat1 / 180;\r\n var radlat2 = Math.PI * lat2 / 180;\r\n var theta = lon1 - lon2;\r\n var radtheta = Math.PI * theta / 180;\r\n var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\r\n if (dist > 1) {\r\n dist = 1;\r\n }\r\n dist = Math.acos(dist);\r\n dist = dist * 180 / Math.PI;\r\n dist = dist * 60 * 1.1515;\r\n if (unit === \"K\") { dist = dist * 1.609344; }\r\n if (unit === \"N\") { dist = dist * 0.8684; }\r\n return dist;\r\n }\r\n },\r\n EventHelper: {\r\n fireOnMapsLoaded: function (callback) {\r\n if (google_map_loaded) {\r\n callback();\r\n }\r\n else {\r\n window.GRGEvents.SIG_GoogleMapsLoaded.add(callback);\r\n }\r\n }\r\n },\r\n BindLocationsAutocomplete: function () {\r\n var $locationHolder = $(\"form.form-location-search\");\r\n $locationHolder.each(function () {\r\n var $currentLocationInput = $(this).find(\"input.text-location\");\r\n var $stateInput = $(this).find(\"select.location-state\");\r\n $currentLocationInput.autocomplete({\r\n source: \"/umbraco/surface/locationssurface/autocompletecity/?country=us\",\r\n minLength: 2,\r\n select: function (e, ui) {\r\n //console.log(ui);\r\n $stateInput.val(ui.item.state);\r\n window.location = ui.item.url;\r\n }\r\n });\r\n });\r\n },\r\n BindGoogleAutocomplete: function () {\r\n var $locationHolder = $(\"form.form-location-search\");\r\n $locationHolder.each(function () {\r\n var $currentLocationInput = $(this).find(\"input.text-location\");\r\n var $parentHolder = $currentLocationInput.closest(\".text-location-holder\");\r\n\r\n var options = {\r\n //types: ['geocode'] //this should work !\r\n types: ['(cities)'],\r\n //types: ['geocode'],\r\n componentRestrictions: { country: googleAutocompleteCountryRestrictions } //[\"us\", \"ca\", \"uk\"]\r\n };\r\n var autocomplete = new google.maps.places.Autocomplete($currentLocationInput[0], options);\r\n\r\n $currentLocationInput.keyup(function () {\r\n //$(this).removeAttr(\"data-lat\");\r\n //$(this).removeAttr(\"data-lon\");\r\n });\r\n $currentLocationInput.blur(function () {\r\n if ($parentHolder.length > 0) {\r\n if ($currentLocationInput.val() === \"\")\r\n { $parentHolder.removeClass(\"selected\"); }\r\n else {\r\n $parentHolder.addClass(\"selected\");\r\n }\r\n }\r\n });\r\n\r\n google.maps.event.addListener(autocomplete, 'place_changed', function () {\r\n var place = autocomplete.getPlace();\r\n console.log(place);\r\n if (place !== null && place.geometry !== null) {\r\n //$currentLocationInput.attr(\"data-lat\", place.geometry.location.lat());\r\n //$currentLocationInput.attr(\"data-lon\", place.geometry.location.lng());\r\n \r\n\r\n if ($parentHolder.length > 0)\r\n { $parentHolder.addClass(\"selected\"); }\r\n\r\n //selected, go there NOW\r\n var searchUrl = window.GRGExtensions.searchUrlHelper.rebuildUrlFriendlyLocationName($currentLocationInput.val());\r\n window.location.href = searchUrl;\r\n }\r\n else {\r\n $currentInput.removeAttr(\"data-lat\");\r\n $currentInput.removeAttr(\"data-lon\");\r\n if ($parentHolder.length > 0)\r\n { $parentHolder.removeClass(\"selected\"); }\r\n }\r\n });\r\n });\r\n },\r\n getTodaysDate: function(){\r\n var today = new Date();\r\n var dd = today.getDate();\r\n\r\n var mm = today.getMonth() + 1;\r\n var yyyy = today.getFullYear();\r\n if (dd < 10) {\r\n dd = '0' + dd;\r\n }\r\n\r\n if (mm < 10) {\r\n mm = '0' + mm;\r\n }\r\n //today = mm + '-' + dd + '-' + yyyy;\r\n //console.log(today);\r\n today = mm + '/' + dd + '/' + yyyy;\r\n //console.log(today);\r\n //today = dd + '-' + mm + '-' + yyyy;\r\n //console.log(today);\r\n //today = dd + '/' + mm + '/' + yyyy;\r\n return today;\r\n },\r\n getTomorrowsDate: function () {\r\n var today = new Date();\r\n today.setDate(today.getDate() + 1);\r\n\r\n var dd = today.getDate();\r\n var mm = today.getMonth() + 1;\r\n var yyyy = today.getFullYear();\r\n if (dd < 10) {\r\n dd = '0' + dd;\r\n }\r\n if (mm < 10) {\r\n mm = '0' + mm;\r\n }\r\n today = mm + '/' + dd + '/' + yyyy;\r\n return today;\r\n },\r\n getDateFromString: function (date_string) {\r\n var myDate = null;\r\n //console.log(\"getting date from string: \" + date_string);\r\n if (date_string !== null && date_string !== \"\" && date_string.indexOf(\"/\") > -1) {\r\n //split\r\n var parts = date_string.split('/');\r\n //console.log(\"splitting\");\r\n //console.log(parts);\r\n myDate = new Date(parts[2] * 1, parts[0] - 1, parts[1]);\r\n //console.log(myDate);\r\n }\r\n return myDate;\r\n },\r\n getDateStringFromDate: function (date_obj) {\r\n var returnString = \"\";\r\n if (date_obj !== null) {\r\n var year = date_obj.getFullYear();\r\n // months and days are inserted into the array in the form, e.g \"01/01/2009\", but here the format is \"1/1/2009\"\r\n var month = window.GRGExtensions.padNumber(date_obj.getMonth() + 1);\r\n var day = window.GRGExtensions.padNumber(date_obj.getDate());\r\n returnString = month + \"/\" + day + \"/\" + year;\r\n }\r\n return returnString;\r\n },\r\n padNumber: function (number) {\r\n var ret = new String(number);\r\n if (ret.length === 1) ret = \"0\" + ret;\r\n return ret;\r\n },\r\n getMinimumStartDate: function (returnAsString) {\r\n returnAsString = returnAsString || false;\r\n //get min start date\r\n var minStartDate = new Date();\r\n minStartDate.setDate(minStartDate.getDate() + window.GRGExtensions.minimumStartBookDays);\r\n\r\n if (returnAsString) {\r\n return window.GRGExtensions.getDateStringFromDate(minStartDate);\r\n }\r\n return minStartDate;\r\n },\r\n getMaximumStartDate: function (returnAsString) {\r\n returnAsString = returnAsString || false;\r\n //get max start date\r\n var maxStartDate = new Date();\r\n maxStartDate.setDate(maxStartDate.getDate() + window.GRGExtensions.maximumStartBookDays);\r\n if (returnAsString) {\r\n return window.GRGExtensions.getDateStringFromDate(maxStartDate);\r\n }\r\n return maxStartDate;\r\n },\r\n getDefaultEndDate: function (startDateString, returnAsString) {\r\n returnAsString = returnAsString || false;\r\n //get max start date\r\n var defaultEndDate = window.GRGExtensions.getDateFromString(startDateString);\r\n defaultEndDate.setDate(defaultEndDate.getDate() + window.GRGExtensions.defaultSearchEndDays);\r\n if (returnAsString) {\r\n return window.GRGExtensions.getDateStringFromDate(defaultEndDate);\r\n }\r\n return defaultEndDate;\r\n },\r\n searchUrlHelper: {\r\n //rebuild url into the format that we want\r\n rebuildUrlFriendlyLocationName: function (given_location) {\r\n var searchUrl = \"\";\r\n\r\n //split into city, state, country. Discard country for now.\r\n var searchSegments = given_location.split(',');\r\n searchUrl = \"/locations/\";\r\n var state = \"\";\r\n var country = \"us\";\r\n var city = \"\";\r\n \r\n if (searchSegments.length > 1) {\r\n //has third section, country?\r\n if (searchSegments.length >= 3) {\r\n \r\n country = searchSegments[2];\r\n city = searchSegments[0];\r\n state = searchSegments[1];\r\n }\r\n else {\r\n //no country?\r\n if (window.GRGExtensions.searchUrlHelper.replaceProvinceAbbreviations(state) === \"usa\") {\r\n city = searchSegments[0];\r\n state = searchSegments[1];\r\n }\r\n else {\r\n city = searchSegments[0];\r\n country = searchSegments[1];\r\n }\r\n \r\n }\r\n\r\n //preformat country\r\n country = window.GRGExtensions.searchUrlHelper.getUrlFriendlyLocationName(country).toLowerCase();\r\n\r\n if (country === \"usa\") {\r\n country = \"us\";\r\n }\r\n\r\n //any countries, redirect them\r\n for (var i = 0; i < googleAutocompleteCountryRedirectMapValue.length; i++) {\r\n for (var j = 0; j < googleAutocompleteCountryRedirectMapValue[i].length; j++) {\r\n if (country === googleAutocompleteCountryRedirectMapValue[i][0]) {\r\n country = googleAutocompleteCountryRedirectMapValue[i][1];\r\n }\r\n }\r\n }\r\n \r\n //us only, pass state with request\r\n if (country === \"us\") {\r\n state = window.GRGExtensions.searchUrlHelper.replaceProvinceAbbreviations(state);\r\n searchUrl += country + \"/\" + window.GRGExtensions.searchUrlHelper.getUrlFriendlyLocationName(state) + \"/\" + window.GRGExtensions.searchUrlHelper.getUrlFriendlyLocationName(city) + \"/\";\r\n }\r\n else {\r\n searchUrl += country + \"/\" + window.GRGExtensions.searchUrlHelper.getUrlFriendlyLocationName(city) + \"/\";\r\n }\r\n \r\n }\r\n //alert(given_location + \": \" + searchUrl);\r\n \r\n return searchUrl;\r\n },\r\n replaceProvinceAbbreviations: function (provinceAbbreviation) {\r\n var provinceAbbreviationUppercase = provinceAbbreviation.trim().toUpperCase();\r\n var stateName = provinceAbbreviation;\r\n //console.log(\"provinceAbbreviationUppercase: \", provinceAbbreviationUppercase);\r\n switch (provinceAbbreviationUppercase) {\r\n case \"AL\": stateName = \"Alabama\"; break;\r\n case \"AK\": stateName = \"Alaska\"; break;\r\n case \"AZ\": stateName = \"Arizona\"; break;\r\n case \"AR\": stateName = \"Arkansas\"; break;\r\n case \"CA\": stateName = \"California\"; break;\r\n case \"CO\": stateName = \"Colorado\"; break;\r\n case \"CT\": stateName = \"Connecticut\"; break;\r\n case \"DE\": stateName = \"Delaware\"; break;\r\n case \"FL\": stateName = \"Florida\"; break;\r\n case \"GA\": stateName = \"Georgia\"; break;\r\n case \"HI\": stateName = \"Hawaii\"; break;\r\n case \"ID\": stateName = \"Idaho\"; break;\r\n case \"IL\": stateName = \"Illinois\"; break;\r\n case \"IN\": stateName = \"Indiana\"; break;\r\n case \"IA\": stateName = \"Iowa\"; break;\r\n case \"KS\": stateName = \"Kansas\"; break;\r\n case \"KY\": stateName = \"Kentucky\"; break;\r\n case \"LA\": stateName = \"Louisiana\"; break;\r\n case \"ME\": stateName = \"Maine\"; break;\r\n case \"MD\": stateName = \"Maryland\"; break;\r\n case \"MA\": stateName = \"Massachusetts\"; break;\r\n case \"MI\": stateName = \"Michigan\"; break;\r\n case \"MN\": stateName = \"Minnesota\"; break;\r\n case \"MS\": stateName = \"Mississippi\"; break;\r\n case \"MO\": stateName = \"Missouri\"; break;\r\n case \"MT\": stateName = \"Montana\"; break;\r\n case \"NE\": stateName = \"Nebraska\"; break;\r\n case \"NV\": stateName = \"Nevada\"; break;\r\n case \"NH\": stateName = \"New Hampshire\"; break;\r\n case \"NJ\": stateName = \"New Jersey\"; break;\r\n case \"NM\": stateName = \"New Mexico\"; break;\r\n case \"NY\": stateName = \"New York\"; break;\r\n case \"NC\": stateName = \"North Carolina\"; break;\r\n case \"ND\": stateName = \"North Dakota\"; break;\r\n case \"OH\": stateName = \"Ohio\"; break;\r\n case \"OK\": stateName = \"Oklahoma\"; break;\r\n case \"OR\": stateName = \"Oregon\"; break;\r\n case \"PA\": stateName = \"Pennsylvania\"; break;\r\n case \"RI\": stateName = \"Rhode Island\"; break;\r\n case \"SC\": stateName = \"South Carolina\"; break;\r\n case \"SD\": stateName = \"South Dakota\"; break;\r\n case \"TN\": stateName = \"Tennessee\"; break;\r\n case \"TX\": stateName = \"Texas\"; break;\r\n case \"UT\": stateName = \"Utah\"; break;\r\n case \"VT\": stateName = \"Vermont\"; break;\r\n case \"VA\": stateName = \"Virginia\"; break;\r\n case \"WA\": stateName = \"Washington\"; break;\r\n case \"WV\": stateName = \"West Virginia\"; break;\r\n case \"WI\": stateName = \"Wisconsin\"; break;\r\n case \"WY\": stateName = \"Wyoming\"; break;\r\n case \"DC\": stateName = \"District of Columbia\"; break;\r\n case \"MH\": stateName = \"Marshall Islands\"; break;\r\n }\r\n //console.log(\"statename:\" + stateName);\r\n return stateName;\r\n },\r\n //not used?\r\n buildSearchUrlFromExternal: function (locationName, stateName) {\r\n var searchUrl = \"\";\r\n searchUrl = \"/locations/us/\" + window.GRGExtensions.searchUrlHelper.getUrlFriendlyLocationName(stateName) + \"/\" + window.GRGExtensions.searchUrlHelper.getUrlFriendlyLocationName(locationName) + \"/\";\r\n return searchUrl;\r\n },\r\n getUrlFriendlyLocationName: function (given_location) {\r\n var locationName = \"\";\r\n if (given_location !== \"\") {\r\n locationName = given_location.trim().replaceAll(\" \", \"-\").replaceAll(\"\\\\.\", \"\");\r\n locationName = locationName.replaceAll(\"é\", \"e\").replaceAll(\"á\", \"a\").replaceAll(\"í\", \"i\").replaceAll(\"ó\", \"o\").replaceAll(\"ú\", \"u\"); \r\n locationName = locationName.replaceAll(\"ü\", \"u\").replaceAll(\"ñ\", \"n\"); \r\n }\r\n //alert(locationName);\r\n return locationName;\r\n },\r\n getUrlFriendlyStartEndDates: function (given_startDate, given_endDate) {\r\n var dates = \"\";\r\n if (given_startDate !== null && given_startDate !== \"\") {\r\n dates = \"&start=\" + given_startDate;\r\n }\r\n if (given_endDate !== null && given_endDate !== \"\") {\r\n dates += \"&end=\" + given_endDate;\r\n }\r\n return dates.replace(\"&\", \"?\").replaceAll(\"/\", \"-\");\r\n },\r\n //get human friendly location name\r\n getLocationNameFromUrl: function (given_location) {\r\n return given_location.replaceAll(\"-\", \" \").replaceAll(\"/\", \", \");\r\n },\r\n getStartOrEndDateFromUrl: function (given_startDate) {\r\n var returnDate = \"\";\r\n if (given_startDate !== null && given_startDate !== \"\") {\r\n returnDate = given_startDate.replaceAll(\"-\", \"/\");\r\n }\r\n return returnDate;\r\n }\r\n },\r\n getUrlParametersAsObject: function () {\r\n //currently only used in search page\r\n\r\n //replace hash with /[cityname]/\r\n //********************************/\r\n var url = window.location.href;\r\n url = url.substr(url.indexOf(\"/search/\") + 8) + \"\"; //relative url now\r\n //get, remove city\r\n //var myCitySplit = url.split('/');\r\n if (url.indexOf(\"city=\") < 0)\r\n {\r\n //console.log(url);\r\n var city = \"\";\r\n if (url.indexOf(\"/\") > -1 && url.indexOf(\"?\") !== 0) {\r\n city = url.substr(0, url.indexOf(\"/\"));\r\n url = url.substr(url.indexOf(\"/\") + 1);\r\n var province = \"\";\r\n var country = \"\";\r\n\r\n if (url.indexOf(\"/\") > -1 && url.indexOf(\"?\") !== 0) {\r\n province = url.substr(0, url.indexOf(\"/\"));\r\n url = url.substr(url.indexOf(\"/\") + 1);\r\n }\r\n if (url.indexOf(\"/\") > -1 && url.indexOf(\"?\") !== 0) {\r\n country = url.substr(0, url.indexOf(\"/\"));\r\n url = url.substr(url.indexOf(\"/\") + 1);\r\n }\r\n //replace below\r\n if (province !== \"\") {\r\n city += \"/\" + province;\r\n }\r\n if (country !== \"\") {\r\n city += \"/\" + country;\r\n }\r\n }\r\n url = \"city=\" + city + url;\r\n }\r\n url = url.replace(\"?\", \"&\");\r\n //console.log(\"new url\", url);\r\n //********************************/\r\n\r\n\r\n //var url = window.location.hash;\r\n var returnVal = null;\r\n if(url.length > 0) {\r\n returnVal = {};\r\n //url = url.substr(2);\r\n var rawUrlFilters = url.split(\"&\");\r\n for (var i = 0; i < rawUrlFilters.length; i++) {\r\n if (rawUrlFilters[i] !== \"\") {\r\n var line = rawUrlFilters[i].split(\"=\");\r\n if (line.length <= 2) {\r\n //0 key, 1 value\r\n var lval = line[1].split(\",\");\r\n returnVal[line[0]] = lval;\r\n }\r\n else {\r\n // 0 = master key name\r\n //split others\r\n //var masterKey = line\r\n var myLineDataValues = rawUrlFilters[i].split(\"|\");\r\n myLineDataValues[0] = myLineDataValues[0].substr(line[0].length + 1);\r\n returnVal[line[0]] = {};\r\n for (var j = 0; j < myLineDataValues.length; j++) {\r\n var subsetVal = myLineDataValues[j].split(\"=\");\r\n returnVal[line[0]][subsetVal[0]] = subsetVal[1];\r\n }\r\n }\r\n }\r\n }\r\n\r\n //change first & to ?\r\n if (url.indexOf(\"&\") > -1){\r\n url = url.replace(\"&\", \"?\");\r\n }\r\n\r\n //console.log(\"retval\");\r\n //console.log(returnVal);\r\n }\r\n //console.log(returnVal);\r\n return returnVal;\r\n },\r\n scrollToElement: function (ele, options) {\r\n options = typeof options !== 'undefined' ? options : null;\r\n var _options = {\r\n headerHeight: null,\r\n offset: 10,\r\n afterElement: false,\r\n justCalculate: false,\r\n speed: 500\r\n };\r\n if (options !== null) {\r\n if (typeof options.headerHeight !== 'undefined' && options.headerHeight !== null) {\r\n _options.headerHeight = options.headerHeight;\r\n }\r\n if (typeof options.offset !== 'undefined' && options.offset !== null) {\r\n _options.offset = options.offset;\r\n }\r\n if (typeof options.afterElement !== 'undefined' && options.afterElement !== null) {\r\n _options.afterElement = options.afterElement;\r\n }\r\n if (typeof options.justCalculate !== 'undefined' && options.justCalculate !== null) {\r\n _options.justCalculate = options.justCalculate;\r\n }\r\n if (typeof options.speed !== 'undefined' && options.speed !== null) {\r\n _options.speed = options.speed;\r\n }\r\n }\r\n var screenHeight = $(window).height();\r\n var distanceFromTop = ($(ele).offset().top - $(window).scrollTop());\r\n var scrollAmount = distanceFromTop;\r\n var headerHeight = 0;\r\n\r\n if (_options.headerHeight !== null) {\r\n headerHeight = _options.headerHeight;\r\n }\r\n else {\r\n headerHeight = $(\"header\").height();\r\n }\r\n\r\n //top\r\n scrollAmount -= headerHeight;\r\n scrollAmount -= _options.offset;\r\n if (_options.afterElement) {\r\n scrollAmount += $(ele).outerHeight();\r\n }\r\n //console.log(\"headerHeight: \" + headerHeight + \", distanceFromTop: \" + distanceFromTop + \" $(ele).offset().top: \" + $(ele).offset().top + \", $(window).scrollTop(): \" + $(window).scrollTop());\r\n var scroll = \"+=\" + (scrollAmount + 0) + 'px';\r\n\r\n if (_options.justCalculate) {\r\n return scrollAmount;\r\n }\r\n else {\r\n $(\"html,body\").animate({ scrollTop: scroll }, _options.speed);\r\n }\r\n },\r\n scrollToElementTop: function (ele, g_headerHeight) {\r\n g_headerHeight = typeof g_headerHeight !== 'undefined' ? g_headerHeight : null;\r\n var screenHeight = $(window).height();\r\n var distanceFromTop = ($(ele).offset().top - $(window).scrollTop());\r\n var scrollAmount = distanceFromTop;\r\n var headerHeight = 0;\r\n var offset = 10;\r\n\r\n if (g_headerHeight !== null){\r\n headerHeight = g_headerHeight;\r\n }\r\n else {\r\n headerHeight = $(\"header\").height();\r\n }\r\n //console.log(\"headerHeight: \" + headerHeight + \", distanceFromTop: \" + distanceFromTop + \" $(ele).offset().top: \" + $(ele).offset().top + \", $(window).scrollTop(): \" + $(window).scrollTop());\r\n\r\n scrollAmount -= headerHeight;\r\n scrollAmount -= offset;\r\n\r\n // now that we know how much of the element is visible\r\n // we can scroll down the appropriate amount to make the \r\n // entire element visible to the user\r\n\r\n // If the height of the element is greater than the height of the \r\n // viewport, then just scroll the distance from top,\r\n // otherwise scroll the scrollAmount to bring the entire element into view\r\n var scroll = \"+=\" + (scrollAmount + 0) + 'px';\r\n\r\n $(\"html,body\").animate({ scrollTop: scroll }, 500);\r\n },\r\n scrollToElementBottom: function (ele) { /*unused*/\r\n var screenHeight = $(window).height();\r\n var distanceFromTop = ($(ele).offset().top - $(window).scrollTop());\r\n var scrollAmount = distanceFromTop;\r\n var headerHeight = $(\"header\").height();\r\n var offset = 10;\r\n //scrollAmount -= headerHeight;\r\n scrollAmount -= offset;\r\n\r\n // now that we know how much of the element is visible\r\n // we can scroll down the appropriate amount to make the \r\n // entire element visible to the user\r\n\r\n // If the height of the element is greater than the height of the \r\n // viewport, then just scroll the distance from top,\r\n // otherwise scroll the scrollAmount to bring the entire element into view\r\n var scroll = \"+=\" + (scrollAmount - $(ele).outerHeight()) + 'px';\r\n\r\n $(\"html,body\").animate({ scrollTop: scroll }, 500);\r\n },\r\n fixedOnScroll: function ($g_markerDom, $g_elementDom, g_offset, g_offset_bottom, g_minMaxScreenWidth, $g_domWidthToMatch, $g_endMarkerDom, g_relativeToParent){\r\n $g_endMarkerDom = typeof $g_endMarkerDom !== 'undefined' ? $g_endMarkerDom : null;\r\n g_relativeToParent = typeof g_relativeToParent !== 'undefined' ? g_relativeToParent : false;\r\n\r\n \r\n this.$markerDom = $g_markerDom;\r\n this.$elementDom = $g_elementDom;\r\n this.offset = g_offset;\r\n this.offset_bottom = g_offset_bottom;\r\n this.minMaxScreenWidth = g_minMaxScreenWidth; //negative values are max, positive values are min\r\n this.$domWidthToMatch = $g_domWidthToMatch;\r\n this.$endMarkerDom = $g_endMarkerDom;\r\n this.relativeToParent = g_relativeToParent;\r\n var self = this;\r\n \r\n\r\n this.headerHeight = $(\"header\").height();\r\n this.currentWidth = $(window).width();\r\n if (self.minMaxScreenWidth === 0 ||\r\n (self.minMaxScreenWidth > 0 && this.currentWidth >= self.minMaxScreenWidth) ||\r\n (self.minMaxScreenWidth < 0 && this.currentWidth <= self.minMaxScreenWidth * -1)) {\r\n\r\n if (self.$domWidthToMatch !== null) {\r\n self.$elementDom.css(\"width\", self.$domWidthToMatch.width());\r\n }\r\n }\r\n\r\n $(window).resize(function () {\r\n self.currentWidth = $(window).width();\r\n self.headerHeight = $(\"header\").height();\r\n //if (self.currentWidth >= self.minScreenWidth) {\r\n if (self.minMaxScreenWidth === 0 ||\r\n (self.minMaxScreenWidth > 0 && self.currentWidth >= self.minMaxScreenWidth) ||\r\n (self.minMaxScreenWidth < 0 && self.currentWidth <= self.minMaxScreenWidth * -1)) {\r\n if (self.$domWidthToMatch !== null) {\r\n self.$elementDom.css(\"width\", self.$domWidthToMatch.width());\r\n }\r\n }\r\n else {\r\n self.$elementDom.css(\"width\", \"\");\r\n }\r\n //reset px values, if fixed, set px, if not, set px\r\n if (self.$elementDom.hasClass(\"fixed\")) {\r\n var offsetCalcFixed = (self.headerHeight + self.offset);\r\n self.$elementDom.css(\"top\", (offsetCalcFixed) + \"px\");\r\n }\r\n else {\r\n //abs\r\n var offsetCalcNoFixed = self.offset;\r\n self.$elementDom.css(\"top\", (offsetCalcNoFixed) + \"px\");\r\n }\r\n self.setPosition();\r\n });\r\n\r\n $(window).scroll(function () {\r\n self.setPosition();\r\n });\r\n \r\n //methods\r\n this.setPosition = function () {\r\n var self = this;\r\n var amtScrolled = $(window).scrollTop();\r\n //var posInlineNav = amtScrolled + $inlineNav.offset().top;\r\n //console.log(posInlineNav);\r\n //if (self.currentWidth >= self.minScreenWidth) {\r\n if (self.minMaxScreenWidth === 0 ||\r\n (self.minMaxScreenWidth > 0 && self.currentWidth >= self.minMaxScreenWidth) ||\r\n (self.minMaxScreenWidth < 0 && self.currentWidth <= self.minMaxScreenWidth * -1)) {\r\n if (amtScrolled + self.offset > self.$markerDom.offset().top - self.headerHeight) {\r\n //console.log(\"setposlogic\");\r\n var offsetCalc = self.offset;\r\n \r\n if (self.$endMarkerDom !== null) {\r\n //console.log((amtScrolled + headerHeight + offset + $elementDom.height()) + \" vs \" + $endMarkerDom.offset().top);\r\n if ((!self.relativeToParent && (amtScrolled + self.headerHeight + self.$elementDom.outerHeight() + self.offset_bottom > self.$endMarkerDom.offset().top)) || (self.relativeToParent && (amtScrolled + self.headerHeight + self.$elementDom.outerHeight() + self.offset + self.offset_bottom > self.$endMarkerDom.offset().top))) {\r\n //end reached\r\n //console.log(\"abs\");\r\n //console.log(\"check \" + (amtScrolled + self.headerHeight + self.$elementDom.outerHeight() + self.offset));\r\n if (!self.$elementDom.hasClass(\"absolute\")) {\r\n self.$elementDom.removeClass(\"fixed\").addClass(\"absolute\");\r\n }\r\n if (!self.relativeToParent) {\r\n offsetCalc = self.$endMarkerDom.offset().top - self.headerHeight - self.$elementDom.outerHeight() - self.offset_bottom;\r\n }\r\n else {\r\n offsetCalc = self.$endMarkerDom.offset().top - self.$elementDom.outerHeight() - self.offset_bottom - self.$elementDom.parent().offset().top;\r\n //console.log(offsetCalc);\r\n }\r\n self.$elementDom.css(\"top\", (offsetCalc) + \"px\");\r\n }\r\n else {\r\n //normal\r\n if (!self.$elementDom.hasClass(\"fixed\")) {\r\n offsetCalc = (self.headerHeight + self.offset);\r\n self.$elementDom.removeClass(\"absolute\").addClass(\"fixed\");\r\n self.$elementDom.css(\"top\", (offsetCalc) + \"px\");\r\n }\r\n }\r\n\r\n }\r\n else {\r\n //standard\r\n if (!self.$elementDom.hasClass(\"fixed\")) {\r\n offsetCalc = (self.headerHeight + self.offset);\r\n self.$elementDom.removeClass(\"absolute\").addClass(\"fixed\");\r\n self.$elementDom.css(\"top\", (offsetCalc) + \"px\");\r\n }\r\n }\r\n\r\n\r\n }\r\n else {\r\n self.$elementDom.removeClass(\"fixed\").removeClass(\"absolute\");\r\n self.$elementDom.css(\"top\", \"0px\");\r\n }\r\n }\r\n else {\r\n //straight up disabled\r\n self.$elementDom.removeClass(\"fixed\").removeClass(\"absolute\");\r\n self.$elementDom.css(\"top\", \"\");\r\n }\r\n };\r\n this.init = function () {\r\n\r\n };\r\n\r\n //init hit\r\n self.setPosition();\r\n },\r\n dynamicSort: function(property) {\r\n var sortOrder = 1;\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n return function (a, b) {\r\n var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\r\n return result * sortOrder;\r\n };\r\n },\r\n showModal: function (given_options) {\r\n //build bootstrap modal\r\n\r\n //buttons: array of html btns\r\n given_options.correctFixedDom = $(\"header\");\r\n\r\n var options = {\r\n id: \"\",\r\n title: \"\",\r\n class: \"\",\r\n body: \"\",\r\n buttons: [],\r\n defaultCloseButton: true,\r\n modalSize: \"\",\r\n callback: null,\r\n callbackRendered: null,\r\n handleLoadingImgLoaded: false,\r\n destroyOnClose: false,\r\n correctFixedDom: null //if set, will set offset to avoid jump\r\n };\r\n if (typeof given_options !== 'undefined' || given_options !== null) {\r\n //get props\r\n if (typeof given_options.id !== 'undefined') {\r\n options.id = given_options.id;\r\n }\r\n if (typeof given_options.title !== 'undefined') {\r\n options.title = given_options.title;\r\n }\r\n if (typeof given_options.class !== 'undefined') {\r\n options.class = \" \" + given_options.class;\r\n }\r\n if (typeof given_options.body !== 'undefined') {\r\n options.body = given_options.body;\r\n }\r\n if (typeof given_options.modalSize !== 'undefined') {\r\n options.modalSize = given_options.modalSize;\r\n if (options.modalSize === \"large\") {\r\n options.modalSize = \"modal-lg\";\r\n } else {\r\n if (options.modalSize === \"small\") {\r\n options.modalSize = \"modal-sm\";\r\n }\r\n }\r\n options.modalSize = \" \" + options.modalSize;\r\n }\r\n if (typeof given_options.buttons !== 'undefined') {\r\n options.buttons = given_options.buttons;\r\n }\r\n if (typeof given_options.defaultCloseButton !== 'undefined' && given_options.defaultCloseButton !== \"\") {\r\n if ((given_options.defaultCloseButton && typeof given_options.buttons === 'undefined') || (given_options.defaultCloseButton && given_options.buttons.length === 0)) {\r\n options.buttons = [''];\r\n }\r\n }\r\n if (typeof given_options.callback !== 'undefined') {\r\n options.callback = given_options.callback;\r\n }\r\n if (typeof given_options.callbackRendered !== 'undefined') {\r\n options.callbackRendered = given_options.callbackRendered;\r\n }\r\n if (typeof given_options.handleLoadingImgLoaded !== 'undefined') {\r\n options.handleLoadingImgLoaded = given_options.handleLoadingImgLoaded;\r\n }\r\n if (typeof given_options.destroyOnClose !== 'undefined') {\r\n options.destroyOnClose = given_options.destroyOnClose;\r\n }\r\n if (typeof given_options.correctFixedDom !== 'undefined' && given_options.correctFixedDom !== null) {\r\n options.correctFixedDom = given_options.correctFixedDom;\r\n }\r\n }\r\n var BSOptions = {\r\n };\r\n var loadingInit = \"\";\r\n if (options.handleLoadingImgLoaded) {\r\n //show loading\r\n loadingInit = \" loading\";\r\n }\r\n var modalHtml = \"\";\r\n\r\n modalHtml += '
\" + e.responseJSON.Message + \"
\" + e.responseJSON.ExceptionMessage + \"