{"version":3,"sources":["geolocation.js"],"names":["CallRestService","request","callback","$","ajax","url","dataType","getLatLonFromQuery","jsonp","r","error","e","errorMessage","resources","res","getPinCode","lat","lon","_vars","bingMapsAPIKey","resource","resourceSets","estimatedTotal","geocodePoints","coordinates","postalCode","show","getLatLon","zip","message","html","query","encodeURIComponent","_currentCookie","console","log","i","length","value","indexOf","key","cookieSetItemCommon","address","countryRegion","cookieGetItemCommon","cookieStorage","setCookie","getCookie","currentZipCode","destination","destinationURL","_elements","$geo_overlay","$geo_close","$geolocator","$geolocatorGo","$geo_input_global","inventory_landing_url","window","location","href","document","ready","click","this","attr","ZipStorage","getZip","on","geolocator","geoBtnGo","keydown","event","keyCode","blur","next","siblings","getLocation","toggleClass","zipGate","removeClass","checkURL","path","long","timeout","mobileTest","init","navigator","geolocation","getCurrentPosition","setPositions","geoBlocked","getZipCodeDesktop","enableHighAccuracy","maximumAge","showOverlay","ajaxCall","position","$input","coords","latitude","longitude","setZip","updateAll","thisObj","test","val","inputText","country","trim","type","data","complete","status","JSON","stringify","responseJSON","zipCode","zip_code","zipReadyEvent","jqXHR","Event","ZIP_READY_EVENT_NAME","isMobile","dispatchEvent","userAgent","substr","zipCheckCookie","hide","Cookies","get","set"],"mappings":"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","file":"geolocation.min.js","sourcesContent":["\r\n\r\n// vars\r\nvar _vars = {\r\n currentZipCode: '',\r\n destination: false, // pages that need the zip code\r\n destinationURL: '', // destination page\r\n bingMapsAPIKey: bingMapsAPIKey\r\n};\r\n\r\n// Form elements\r\nvar _elements = {\r\n $geo_overlay: $('.geo-overlay'), //geo overlay full page\r\n $geo_close: $('.geo-close'), // geo Overlay 'X'\r\n $geolocator: $('.geolocator'), // OK, USE MY LOCATION btn\r\n $geolocatorGo: $('.geolocator-go'), // Go geo \r\n $geo_input_global: $('.geo-input') // nav & overlay geo input\r\n};\r\n\r\n// get previous url (before user lands to inventory)\r\nvar inventory_landing_url = window.location.href;\r\n\r\n// pages that need zipGate\r\n// used for OnClick and OnLoad\r\n// var _checkURL = [\r\n// '/',\r\n// '/inventory',\r\n// '/dealer-locator'\r\n// ];\r\n\r\n\r\n$(document).ready(function () {\r\n\r\n $('.search-inventory-btn, .offer-home img').click(function () {\r\n\r\n // not sure if this is safe to call\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n\r\n // save destination URL to variable\r\n _vars.destinationURL = $(this).attr('data-destination');\r\n\r\n if (ZipStorage.getZip()) {\r\n // Zip exists, redirect user\r\n window.location.href = _vars.destinationURL;\r\n }\r\n });\r\n\r\n // Go btn\r\n $('.geolocator-go').on('click', function (e) {\r\n geolocator.geoBtnGo($(this));\r\n });\r\n\r\n // keyboard enter pressed\r\n _elements.$geo_input_global.keydown(function (e) {\r\n if (event.keyCode == 13) {\r\n $(this).blur();\r\n geolocator.geoBtnGo($(this).next('.geolocator-go'));\r\n }\r\n });\r\n\r\n // keyboard enter pressed - zipgate overlay\r\n $('.geo-search-overlay').keydown(function (event) {\r\n if (event.keyCode == 13) {\r\n $(this).blur();\r\n $(this).siblings('.geolocator-go').click();\r\n }\r\n });\r\n\r\n // OK, use my location btn click\r\n _elements.$geolocator.on('click', function (e) {\r\n geolocator.getLocation();\r\n });\r\n\r\n // close Geolocation overlay\r\n $('.geo-close').on('click', function (e) {\r\n $('.geo-overlay').toggleClass('no-show');\r\n });\r\n\r\n\r\n}); //document ready END\r\n\r\n\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * zipGate START\r\n * if geo fails for mobile and desktop\r\n * and zip is needed for the page use\r\n * geo overlay to request it\r\n * ************************************* \r\n */\r\n\r\nvar zipGate = new function () {\r\n\r\n this.showOverlay = function () {\r\n\r\n console.log('calling showOverlay');\r\n // console.log(_elements);\r\n // _elements.$geo_overlay.removeClass('no-show');\r\n $('.geo-overlay').removeClass('no-show');\r\n // console.log('calling showOverlay2');\r\n\r\n }\r\n\r\n this.checkURL = function () {\r\n }\r\n\r\n this.destinationURL = function (path) {\r\n }\r\n\r\n} // zipGate END \r\n\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * geolocator START \r\n * - OK, USE MY location btn click\r\n * - HTML5 Geolocation for Mobile\r\n * - getZipCodeDesktop handler for Desktop\r\n * *************************************\r\n */\r\n\r\nvar geolocator = new function () {\r\n\r\n var lat, long;\r\n console.log('geolocator');\r\n\r\n // get location/position\r\n this.getLocation = function () {\r\n\r\n // if mobile user\r\n if (mobileTest.init()) {\r\n\r\n // if browser supports HTML5 'navigator.geolocation'\r\n // Use HTML5 'navigator.geolocation' to get lat/long\r\n if (navigator.geolocation) {\r\n // get lat/long then call 'geolocator.setPositions()'\r\n // Only works in 'localhost' or 'https'\r\n navigator.geolocation.getCurrentPosition(geolocator.setPositions, geolocator.geoBlocked, {\r\n timeout: 30000,\r\n enableHighAccuracy: true,\r\n maximumAge: 75000\r\n });\r\n\r\n } else {\r\n // since HTML5 geo is not supported, ask user to input location\r\n zipGate.showOverlay();\r\n }\r\n\r\n }\r\n // if desktop - call getZipCodeDesktop handler\r\n else {\r\n getZipCodeDesktop.ajaxCall();\r\n }\r\n\r\n } // this.getLocation END\r\n\r\n\r\n this.geoBlocked = function () {\r\n console.log('geo Blocked by user');\r\n\r\n // hide \"Ok, USE MY LOCATION\" btn\r\n // _elements.$geolocator.addClass('no-show')\r\n\r\n // since HTML5 geo is BLOCKED by user\r\n zipGate.showOverlay();\r\n\r\n } //geoBlocked\r\n\r\n\r\n // for Mobile\r\n // convert lat/long from positions using 'getPinCode'\r\n this.setPositions = function (position) {\r\n lat = position.coords.latitude;\r\n long = position.coords.longitude;\r\n\r\n // Call bing to convert to Zip\r\n getPinCode(lat, long, function (res, lat, lon) {\r\n // call updateCookieZip to update cookie\r\n setZip.updateAll(res);\r\n });\r\n }\r\n\r\n // geolocation btn click\r\n this.geoBtnGo = function (thisObj) {\r\n console.log('geoBtnGo');\r\n\r\n // var $input = thisObj.prev('.search-box');\r\n var $input = $('.search-box');\r\n\r\n // var $input = $('#searchBoxContainer-overlay .search-box');\r\n var lat = null,\r\n lon = null;\r\n // $('.geo-input-error-wrapper').removeClass('active');\r\n // Validate: is there val() in input\r\n if ($input.val()) {\r\n\r\n var zip = $input.val();\r\n var zipRegex = /^\\d{5}$/;\r\n\r\n // check input for numbers only\r\n if (!zipRegex.test(zip)) {\r\n errorMessage.show('Please enter a numeric 5-digit zip code only.');\r\n return;\r\n }\r\n\r\n //getLatLonFromQuery($input.data('suggestion') || $input.val(), function(lat, lon, country) {\r\n getLatLonFromQuery($input.val(), function (lat, lon, country) {\r\n\r\n if (country !== \"United States\") {\r\n errorMessage.show('Zip code is outside of United States.');\r\n return;\r\n }\r\n\r\n getPinCode(lat, lon, function (res, lat, lon) {\r\n\r\n //sometimes api returns incorrect zip. So, if user searched for a zip, then show it directly\r\n var inputText = $input.val();\r\n if (inputText.length > 0 && /^\\d{5}$/.test(inputText.trim())) {\r\n res = inputText;\r\n }\r\n\r\n // call updateCookieZip to update Local Storage\r\n setZip.updateAll(res);\r\n\r\n });\r\n\r\n });\r\n\r\n\r\n\r\n } else {\r\n\r\n //input is empty - no val in input \r\n errorMessage.show('Please enter a zip code.');\r\n\r\n }\r\n\r\n }\r\n\r\n}\r\n/* geolocator END */\r\n\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * getZipCodeDesktop - Zip by IP Location handler START\r\n * - get zip code for desktop user from handler\r\n *\r\n * *************************************\r\n */\r\nvar getZipCodeDesktop = new function () {\r\n\r\n this.ajaxCall = function () {\r\n\r\n console.log('ajaxCall get-zip-by-ip-address.ashx');\r\n\r\n $.ajax({\r\n type: 'POST',\r\n dataType: \"json\",\r\n url: '/api/geolocation/getzipfromipaddress',\r\n data: {},\r\n\r\n complete: function (data, status) {\r\n\r\n console.log('ajax data zipcode: ' + JSON.stringify(data));\r\n data = data.responseJSON;\r\n if (data.status == 'failure'){\r\n // since ajax call failed, ask user to input location which logic is in inventory\r\n if (_vars.destinationURL != '') {\r\n window.location.href = _vars.destinationURL;\r\n }\r\n\r\n } else {\r\n if (status == 'success') {\r\n // data = data.responseJSON;\r\n console.log('282: ', data);\r\n \r\n // call updateCookieZip to update cookie\r\n getLatLon(data.zip_code, function (lat, lon, zip) {\r\n setZip.updateAll(zip);\r\n });\r\n \r\n } else {\r\n \r\n // since ajax call failed, ask user to input location\r\n zipGate.showOverlay();\r\n }\r\n }\r\n \r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n // since ajax call failed, ask user to input location\r\n zipGate.showOverlay();\r\n }\r\n });\r\n\r\n }\r\n}\r\n/* getZipCodeDesktop - IP Location handler END */\r\n\r\n\r\n/*\r\n * *************************************\r\n * setZip\r\n * - update Cookie with zip code\r\n * *************************************\r\n */\r\nvar setZip = new function () {\r\n\r\n this.updateAll = function (zipCode) {\r\n\r\n // update zip in local storage\r\n if (zipCode) {\r\n ZipStorage.setZip(zipCode);\r\n }\r\n\r\n // after update, redirect user to destination\r\n if (_vars.destinationURL != '') {\r\n window.location.href = _vars.destinationURL;\r\n }\r\n\r\n var zipReadyEvent = new Event(this.ZIP_READY_EVENT_NAME);\r\n document.dispatchEvent(zipReadyEvent);\r\n } // updateAll END\r\n\r\n} /* setZip END */\r\n\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * mobileTest\r\n * \r\n * *************************************\r\n */\r\nvar mobileTest = new function () {\r\n this.init = function () {\r\n var isMobile = false;\r\n //Detect mobile\r\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4))) isMobile = true;\r\n\r\n if (isMobile) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n} /* mobileTest END */\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * check if zip code is in Cookie\r\n * *************************************\r\n */\r\nvar zipCheckCookie = new function () {\r\n this.init = function () {\r\n // look for zipcode in local storage\r\n _vars.currentZipCode = ZipStorage.getZip();\r\n console.log('initial cookie zip check: ' + _vars.currentZipCode);\r\n if (_vars.currentZipCode) {\r\n // init this page - zip is ready\r\n $('body').trigger('app.zipReady');\r\n\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n} /* zipCheckCookie END */\r\n\r\n\r\n//} //constructor() END\r\n\r\n//} // class geolocation END\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * BING MAP START\r\n * BING map code will be here \r\n * ************************************* \r\n */\r\n\r\nfunction CallRestService(request, callback) {\r\n $.ajax({\r\n url: request,\r\n dataType: \"jsonp\",\r\n jsonp: \"jsonp\",\r\n success: function (r) {\r\n callback(r);\r\n },\r\n error: function (e) {\r\n // console.log(e.statusText);\r\n errorMessage.show('API error');\r\n }\r\n });\r\n} // CallRestService END\r\n\r\n\r\nfunction getPinCode(lat, lon, callback) {\r\n\r\n // CallRestService('https://dev.virtualearth.net/REST/v1/Locations/' + lat + ',' + lon + '?key=' + bingMapsAPIKey_AutoComplete,\r\n CallRestService('https://dev.virtualearth.net/REST/v1/Locations/' + lat + ',' + lon + '?key=' + _vars.bingMapsAPIKey,\r\n\r\n function (res) {\r\n //console.log('getPinCode:', res);\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0) {\r\n callback(res.resourceSets[0].resources[0].address.postalCode, lat, lon);\r\n } else {\r\n errorMessage.show('Zip code does not exist on Bing Maps!');\r\n }\r\n\r\n })\r\n}\r\n\r\n\r\nfunction getLatLon(zip, callback) {\r\n\r\n // CallRestService('https://dev.virtualearth.net/REST/v1/Locations?postalCode=' + zip + '&key=' + bingMapsAPIKey_AutoComplete,\r\n CallRestService('https://dev.virtualearth.net/REST/v1/Locations?postalCode=' + zip + '&key=' + _vars.bingMapsAPIKey,\r\n\r\n function (res) {\r\n //console.log('getLatLon:', res);\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0) {\r\n callback(res.resourceSets[0].resources[0].geocodePoints[0].coordinates[0],\r\n res.resourceSets[0].resources[0].geocodePoints[0].coordinates[1], zip);\r\n } else {\r\n errorMessage.show('Zip code does not exist on Bing Maps!');\r\n }\r\n })\r\n}\r\n\r\n\r\nfunction getLatLonFromQuery(query, callback) {\r\n\r\n CallRestService('https://dev.virtualearth.net/REST/v1/Locations?q=' + encodeURIComponent(query) + '&key=' + _vars.bingMapsAPIKey,\r\n\r\n function (res) {\r\n\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0) {\r\n\r\n // if any resource has entityType:postalcode1 then use that else use first \r\n var resources = res.resourceSets[\"0\"].resources;\r\n var resource;\r\n for (var i = 0; i < resources.length; i++) {\r\n\r\n if (resources[i].entityType.indexOf('Postcode') >= 0) {\r\n resource = resources[i];\r\n break;\r\n }\r\n }\r\n\r\n if (resource == null) {\r\n resource = resources[\"0\"];\r\n }\r\n\r\n callback(resource.geocodePoints[\"0\"].coordinates[\"0\"],\r\n resource.geocodePoints[\"0\"].coordinates[\"1\"], resource.address.countryRegion);\r\n } else {\r\n errorMessage.show('Zip code does not exist on Bing Maps!');\r\n }\r\n })\r\n}\r\n\r\n/* BING MAP END */\r\n\r\n\r\n\r\n/*\r\n * *************************************\r\n * errorBox START \r\n * *************************************\r\n */\r\n\r\nvar errorMessage = new function () {\r\n\r\n this.show = function (message) {\r\n $('.zip-error').html(message);\r\n }\r\n\r\n this.hide = function () {\r\n $('.zip-error').html('');\r\n }\r\n\r\n}\r\n\r\n\r\n// use cookies to save zip\r\nvar cookieStorage = new function () {\r\n this.getCookie = function (key) {\r\n\r\n var _currentCookie = Cookies.get(key);\r\n if (_currentCookie) {\r\n console.log('cookie is defined if: ' + _currentCookie);\r\n return Cookies.get(key);\r\n } else {\r\n console.log('cookie is undefined else');\r\n return false;\r\n }\r\n\r\n }\r\n this.setCookie = function (key, value) {\r\n console.log('setCookie ' + key + ' ' + value)\r\n Cookies.set(key, value);\r\n }\r\n};\r\n\r\n\r\n//global function to setitem in cookie\r\nfunction cookieSetItemCommon(key, value) {\r\n console.log('Using SET Cookies');\r\n cookieStorage.setCookie(key, value);\r\n};\r\n\r\n//global function to getitem from cookie\r\nfunction cookieGetItemCommon(key) {\r\n if (key != null) {\r\n console.log('Using GET Cookies');\r\n return cookieStorage.getCookie(key);\r\n } else {\r\n console.log('cookieGetItemCommon Key Null');\r\n }\r\n};"]}