{"version":3,"sources":["controllers/dlTabController.js","dealer-locator.js","services/location-service.js","services/storage-service.js","services/validation-service.js","controllers/tabCSController.js","controllers/tabNameController.js","controllers/tabZipController.js","filters/phone-number-filter.js","filters/redirectHttps.js","filters/zipcode-format.js"],"names":["getParameterByName","name","url","arguments","length","undefined","window","location","href","replace","regex","RegExp","results","exec","decodeURIComponent","zip","strZip","substring","angular","initPage","localStorageZip","ZipStorage","getZip","dl","dl_CallRestService","request","callback","$","ajax","dataType","jsonp","success","r","dl_onApiSuccess","error","e","geoDebug","console","log","statusText","dl_onApiError","dl_getLatLonFromQuery","query","encodeURIComponent","BingMapKey","res","resourceSets","estimatedTotal","resource","resources","i","entityType","indexOf","geocodePoints","coordinates","address","countryRegion","dl_getPinCode","lat","lon","postalCode","dl_getLatLon","localStorageSetItemCommon","key","value","zipToString","commonStorage","setCookie","localStorageGetItemCommon","getCookie","validateInput","id","$e","val","isError","_ErrorMessage","addClass","focus","html","removeClass","dataURL","ngScope","element","document","querySelector","scope","tabApp","module","controller","$scope","$http","$timeout","tab","tZip","tCS","tName","global","loadedDealers","filteredDealers","allDealers","allCounts","setTab","newTab","is","find","eq","filterDealers","hideTabError","getTabScope","isSet","tabNum","loadCurrentTabData","triggerHandler","prevZip","Number","inputZip","getData","tabScope","show","get","params","radius","then","data","status","showTabError","hide","Output","Results","Aggregates","Dealers","Dealer","countData","push","DealerID","Count","counts","getDataForName","byNameDealers","POIResponse","POIs","POI","finalData","d","DealerDistance","Distance","DealerURL","InternetAddress","DealerName","POIName","DealerAddress","Address","DealerCity","City","DealerState","State","DealerZip","ZipCode","DealerPhoneNo","Phone","POIId","DealerLat","Latitude","DealerLong","Longitude","DealerAttributes","getDealerAttributes","carCount","$evalAsync","zipOverlaySubmit","callFloodlight","scrollTop","filtered","clearMapPins","dealerNameToSearch","hasClass","toUpperCase","dealer","test","DealerHasBuyOnline","getHasBuyOnline","sort","a","b","loadNextDealers","drawMapCircleRange","alreadyVisible","getCarCount","addPinToMap","$$phase","$apply","dealers","DealerAttribute","getCarCountForDealerName","countsByDealerName","Models","Model","displayCarCountForDealerNames","$dealers","displayCarCountForDealer","$resultDiv","text","dealerID","attr","dealerid","countRes","carCountArray","sumCarCountArray","parseInt","ModelVINsOnSite","hasCode","totalAtr","Code","validateZip","city","inputCity","state","inputState","locationLabel","setZip","_satellite","track","inputName","initialZip","toString","firstLoad","debug","this","_vars","pinIcon","getElementsByClassName","initMap","isLoading","Microsoft","_elements","credentials","showDashboard","showMapTypeSelector","enableSearchLogo","showScalebar","infobox","Maps","Infobox","Location","visible","setMap","map","loadModule","addHandler","onMapMoved","centerMap","center","Pushpin","entities","removeAt","pushpins","pushpin","setOptions","width","height","typeName","pinNumber","icon","metadata","description","dealerName","dealerId","dealerDistance","dealerHasBuyOnline","errorCallback","target","showInfoBox","Events","clicked","hideInfoBox","_e$target$metadata","TapLocatorMapFuntions","options","context","dealers_position","selected_dealer_name","usedev","selected_dealer_distance","click","on","$outer","closest","offset","top","outerWidth","animate","clearQueue","isClicked","filter","_pin","pin","pinIconActive","currentZoomLevel","getZoom","lastZoomLevel","userChangedZoom","getCenter","latitude","longitude","miles","bounds","bound","LocationRect","fromLocations","milesRange","bestview","addMilesToLocation","meters","Math","cos","saveLatLong","stopPropagation","dl_getLocation","scroll","ac_ele","input","getElementById","list","ready","body","preventDefault","trigger","keydown","inArray","keyCode","ctrlKey","metaKey","isHandlingEvent","event","firstOption","nextOption","activeElement","nextElementSibling","currentOption","previousElementSibling","lastdirection","setAttribute","number","String","formattedNumber","c","slice","area","front","end","hostname","navigator","geolocation","getCurrentPosition","position","coords","timeout","enableHighAccuracy","maximumAge","Cookies","set","maxLength"],"mappings":"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","file":"dealer-locator.min.js","sourcesContent":["// tabs module\r\n//returns angular $scope for dlTabController\r\nvar dataURL = '';\r\n\r\nfunction getParameterByName(name, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)','i'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n}\r\n\r\n\r\nvar ngScope = function() {\r\n return angular.element(document.querySelector('.dealer-locator')).scope();\r\n};\r\n\r\nvar tabApp = angular.module('dealerLocatorApp', []);\r\ntabApp.controller('dlTabController', ['$scope', '$http', '$timeout', function($scope, $http, $timeout) {\r\n\r\n $scope.tab = 1;\r\n\r\n // for stroing data-model of 3 tabs\r\n $scope.tZip = {\r\n isError: false,\r\n error: 'The zip code entered was invalid. Please try again.'\r\n };\r\n $scope.tCS = {\r\n isError: false,\r\n error: 'The city or state entered was invalid. Please try again'\r\n };\r\n $scope.tName = {\r\n isError: false,\r\n error: 'The name entered was invalid. Please try again'\r\n };\r\n\r\n //data-model that can be shared between all controllers\r\n $scope.global = {\r\n loadedDealers: [],\r\n filteredDealers: [],\r\n allDealers: [],\r\n allCounts: []\r\n };\r\n\r\n //Show/hide tabs\r\n $scope.setTab = function(newTab) {\r\n\r\n if ($('.spinner').is(':visible'))\r\n {\r\n return;\r\n }\r\n\r\n $scope.tab = newTab;\r\n\r\n $timeout(function () {\r\n $('div.active:visible')\r\n .find('input')\r\n .eq(0).focus();\r\n })\r\n \r\n //loadCurrentTabData();\r\n $timeout(function() {\r\n $scope.global.filterDealers();\r\n\r\n $scope.global.hideTabError($scope.global.getTabScope());\r\n }, 100);\r\n\r\n };\r\n\r\n $scope.isSet = function(tabNum) {\r\n return $scope.tab === tabNum;\r\n };\r\n\r\n $scope.global.getTabScope = function(tab) {\r\n tab = tab || $scope.tab;\r\n\r\n return tab === 1 ? $scope.tZip :\r\n tab === 2 ? $scope.tCS :\r\n $scope.tName;\r\n }\r\n\r\n loadCurrentTabData = function() {\r\n\r\n $timeout(function() {\r\n\r\n angular\r\n .element('.dl-inputs .active .submit-btn').triggerHandler('click');\r\n\r\n });\r\n };\r\n\r\n $scope.global.prevZip = Number($scope.tZip.inputZip);\r\n //common function to get data for all the tabs\r\n $scope.global.getData = function(zip, tabScope) {\r\n\r\n\r\n //tracking\r\n // callFloodlight('dealer-locator-results');\r\n\r\n if ($scope.global.prevZip != zip) {\r\n\r\n $scope.global.prevZip = zip;\r\n $scope.global.allDealers = [];\r\n\r\n $('.spinner').show();\r\n //$http.get(\"data/data-dl7-90401-new.json.txt\", {\r\n var usedev = getParameterByName('usedev');\r\n\r\n switch (usedev) {\r\n case '1': \r\n dataURL = 'https://acuracertifieddev.rpa-dev.com';\r\n break;\r\n case '2':\r\n dataURL = 'https://acuracertifieddev2.rpa-dev.com';\r\n break;\r\n default:\r\n dataURL = '';\r\n }\r\n\r\n\r\n $http.get(dataURL + \"/api/dealerlocator/finddealers\", {\r\n params: {\r\n zip: zipToString(zip),\r\n radius: 250\r\n }\r\n }).then(function(res) {\r\n if (res.data.status == 'failure') {\r\n tabScope && $scope.global.showTabError(tabScope, 'The zip code entered was invalid. Please try again.');\r\n $('.spinner').hide();\r\n return;\r\n }\r\n\r\n //save dealer data in model\r\n $scope.global.allDealers = null;\r\n\r\n if (res.data.Output.Results.Aggregates.Dealers == null) {\r\n tabScope && $scope.global.showTabError(tabScope, 'No dealer found.');\r\n $('.spinner').hide();\r\n return;\r\n }\r\n\r\n if (res.data.Output.Results.Dealers != null) {\r\n $scope.global.allDealers = res.data.Output.Results.Dealers.Dealer;\r\n }\r\n\r\n if ($scope.global.allDealers == null) {\r\n tabScope && $scope.global.showTabError(tabScope, 'No dealer found.');\r\n $('.spinner').hide();\r\n return;\r\n }\r\n\r\n //extract count data in to model\r\n var countData = [];\r\n if (res.data.Output.Results.Aggregates.Dealers != null) {\r\n countData = (res.data.Output.Results.Aggregates.Dealers).Dealer;\r\n }\r\n\r\n for (var i = 0; i < countData.length; i++) {\r\n $scope.global.allCounts.push({\r\n DealerID: countData[i]['@DealerID'],\r\n Count: countData[i]['@Count']\r\n });\r\n }\r\n //filter and display data on the page\r\n $scope.global.filterDealers();\r\n\r\n $('.spinner').hide();\r\n\r\n },\r\n //callback function if there is error loading json\r\n function errorCallback(counts) {\r\n\r\n if (tabScope) {\r\n $scope.global.showTabError(tabScope, 'An error occurred and we were not able to locate dealers. Please try again later.');\r\n }\r\n\r\n $('.spinner').hide();\r\n\r\n });\r\n\r\n } else {\r\n\r\n //filter and display data on the page\r\n $scope.global.filterDealers();\r\n }\r\n $scope.global.getDataForName();\r\n };\r\n\r\n $scope.global.getDataForName = function(zip) {\r\n\r\n\r\n //tracking\r\n //callFloodlight('dealer-locator-results');\r\n\r\n var tabScope = $scope.tName;\r\n\r\n if (!$scope.global.byNameDealers || $scope.global.byNameDealers.length == 0) {\r\n\r\n //$scope.global.prevName = searchText;\r\n //$scope.global.allDealers = [];\r\n\r\n $('.spinner').show();\r\n // $http.get(\"all-names.json\", {\r\n var usedev = getParameterByName('usedev');\r\n\r\n switch (usedev) {\r\n case '1': \r\n dataURL = 'https://acuracertifieddev.rpa-dev.com';\r\n break;\r\n case '2':\r\n dataURL = 'https://acuracertifieddev2.rpa-dev.com';\r\n break;\r\n default:\r\n dataURL = '';\r\n }\r\n \r\n $http.get(dataURL + \"/api/dealerlocator/getalldealers\", {\r\n params: {\r\n zip: zipToString(zip),\r\n //search: searchText\r\n }\r\n }).then(function(res) {\r\n\r\n if (res.data.status == 'failure') {\r\n tabScope && $scope.global.showTabError(tabScope, 'Dealers not found. Please try again.');\r\n $('.spinner').hide();\r\n return;\r\n }\r\n\r\n //$http.get(\"name-count.json\", {\r\n // // $http.get(\"/api/dealerlocator/getalldealers\", {\r\n // params: {\r\n // dealerid: '12345',\r\n // //search: searchText\r\n // }\r\n //}).then(function (countRes) {\r\n\r\n\r\n //$scope.global.countsByDealerName = countRes.data;\r\n\r\n\r\n\r\n //map dealer data and save in model\r\n data = res.data.POIResponse.POIs.POI;\r\n var finalData = [];\r\n for (var i = 0; i < data.length; i++) {\r\n var d = data[i];\r\n\r\n finalData.push({\r\n DealerDistance: d.Distance,\r\n DealerURL: d.InternetAddress,\r\n DealerName: d.POIName,\r\n DealerAddress: d.Address,\r\n DealerCity: d.City,\r\n DealerState: d.State,\r\n DealerZip: d.ZipCode,\r\n DealerPhoneNo: d.Phone,\r\n DealerID: d.POIId,\r\n DealerLat: d.Latitude,\r\n DealerLong: d.Longitude,\r\n DealerAttributes: $scope.global.getDealerAttributes(d.POIId),\r\n carCount: '' //$scope.global.getCarCountForDealerName(d.POIId) || 1,\r\n });\r\n }\r\n\r\n $scope.global.byNameDealers = finalData;\r\n //extract count data in to model\r\n //var countData = (res.data.Output.Results.Aggregates.Dealers).Dealer;\r\n //for (var i = 0; i < countData.length; i++) {\r\n // $scope.global.allCounts.push({\r\n // DealerID: countData[i]['@DealerID'],\r\n // Count: countData[i]['@Count']\r\n // });\r\n //}\r\n\r\n //filter and display data on the page\r\n $scope.global.filterDealers();\r\n\r\n $('.spinner').hide();\r\n\r\n //});\r\n\r\n\r\n\r\n },\r\n //callback function if there is error loading json\r\n function errorCallback(counts) {\r\n\r\n if (tabScope) {\r\n $scope.global.showTabError(tabScope, 'An error occurred and we were not able to locate dealers. Please try again later.');\r\n }\r\n\r\n $('.spinner').hide();\r\n\r\n });\r\n\r\n } else {\r\n\r\n //filter and display data on the page\r\n $scope.global.filterDealers();\r\n }\r\n }\r\n\r\n //show error msg in a tab\r\n $scope.global.showTabError = function(tabScope, error) {\r\n tabScope.isError = true;\r\n tabScope.error = error;\r\n $scope.$evalAsync();\r\n }\r\n\r\n //hide error msg from the tab\r\n $scope.global.hideTabError = function(tabScope) {\r\n tabScope.isError = false;\r\n\r\n $('input, select').removeClass('dl-zip-error');\r\n }\r\n\r\n //zip overlay - submit zip \r\n $scope.global.zipOverlaySubmit = function() {\r\n\r\n if (!validateInput('dl-no-zip-input'), !validateInput('dl-no-zip-input-mobile')) {\r\n return;\r\n }\r\n\r\n //tracking\r\n callFloodlight('dealer-locator-results');\r\n\r\n //load data as per zip\r\n $scope.tZip.getData();\r\n\r\n //hide overlay, show main panel\r\n $('#dl-zip-off').hide();\r\n $('#dl-zip-on').show();\r\n $(window).scrollTop(0);\r\n }\r\n\r\n //filters the dealers as per input, loads them into ng model etc\r\n $scope.global.filterDealers = function() {\r\n\r\n var allDealers = $scope.global.allDealers;\r\n //console.log('allDealers',allDealers.length, allDealers);\r\n if (allDealers == null) {\r\n tabScope = $scope.global.getTabScope();\r\n $scope.global.showTabError(tabScope, 'No dealer found.');\r\n return;\r\n }\r\n\r\n var filtered = [];\r\n var milesRange = 2500;\r\n\r\n dl.clearMapPins();\r\n\r\n $scope.global.loadedDealers = [];\r\n\r\n if (($scope.tab == 1 && $('#zipCodeInput').val() == '') || ($scope.tab == 2 && ($('#cityStateInput').val() == '' || $('#state').val() == '')) || ($scope.tab == 3 && $('#nameInput').val() == '')) {\r\n return;\r\n }\r\n\r\n //search by name \r\n var dealerNameToSearch = '';\r\n if ($('.tab-name').hasClass('active')) {\r\n dealerNameToSearch = ($('#nameInput').val() || '').toUpperCase();\r\n }\r\n\r\n //filter dealers and add to ng model\r\n var regex = new RegExp(\"\\\\b\" + dealerNameToSearch, \"gi\");\r\n for (var i = 0; i < allDealers.length; i++) {\r\n\r\n var dealer = allDealers[i];\r\n\r\n //if name-tab active, then filter by name\r\n if ($('.tab-name').hasClass('active') && (dealerNameToSearch == '' || regex.test(dealer.DealerName) == false )) {\r\n\r\n continue;\r\n }\r\n\r\n dealer.DealerHasBuyOnline = $scope.global.getHasBuyOnline(dealer);\r\n filtered.push(dealer);\r\n }\r\n\r\n // if name tab, then sort alphabetically\r\n if ($('.tab-name').hasClass('active')) {\r\n\r\n filtered.sort(function(a, b) {\r\n return a.DealerName.toUpperCase() > b.DealerName.toUpperCase();\r\n });\r\n }\r\n\r\n //load filtered data\r\n $scope.global.filteredDealers = filtered;\r\n $scope.global.loadedDealers = [];\r\n dl.clearMapPins();\r\n $scope.global.loadNextDealers();\r\n\r\n // moves map to position first result at center\r\n if (filtered[0]) {\r\n dl.drawMapCircleRange(filtered[0].DealerLat, filtered[0].DealerLong, 7);\r\n }\r\n }\r\n\r\n //loads dealers in chunks of 3. Data already filtered and loaded in models. It just display then \r\n $scope.global.loadNextDealers = function() {\r\n\r\n var filtered = $scope.global.filteredDealers;\r\n var alreadyVisible = $scope.global.loadedDealers.length || 0;\r\n\r\n\r\n if (filtered.length == 0) {\r\n $scope.global.showTabError($scope.tName, 'No results found. Please try again');\r\n return;\r\n }\r\n\r\n //show next 3\r\n for (var i = 0; i < 3; i++) {\r\n\r\n if (filtered.length > alreadyVisible + i) {\r\n\r\n var dealer = filtered[alreadyVisible + i];\r\n\r\n //car count is saved at different place. Get it and add to dealer object\r\n dealer.carCount = $scope.tab == 3 ? dealer.carCount : ($scope.global.getCarCount(dealer.DealerID) || 1);\r\n\r\n // load to model for display and show pins\r\n $scope.global.loadedDealers.push(dealer);\r\n dl.addPinToMap(dealer.DealerLat, dealer.DealerLong, alreadyVisible + i + 1, dealer.DealerName, 250, dealer.carCount, dealer.DealerID);\r\n }\r\n }\r\n\r\n if (!$scope.$$phase) {\r\n $scope.$apply();\r\n }\r\n\r\n }\r\n\r\n //gets attributes for a dealer\r\n $scope.global.getDealerAttributes = function(DealerID) {\r\n var dealers = $scope.global.allDealers;\r\n\r\n for (var i = 0; i < dealers.length; i++) {\r\n if (dealers[i]['DealerID'] == DealerID)\r\n return dealers[i]['DealerAttributes']\r\n }\r\n\r\n return { DealerAttribute: [] };\r\n }\r\n\r\n\r\n //gets car count for a dealer\r\n $scope.global.getCarCount = function(DealerID) {\r\n\r\n var counts = $scope.global.allCounts;\r\n\r\n for (var i = 0; i < counts.length; i++) {\r\n if (counts[i]['DealerID'] == DealerID)\r\n return counts[i]['Count']\r\n }\r\n return 0;\r\n }\r\n\r\n //get car count for name tab\r\n $scope.global.getCarCountForDealerName = function(DealerID) {\r\n\r\n\r\n var counts = $scope.global.countsByDealerName;\r\n \r\n if (!counts) return;\r\n counts = counts.Output.Results.Models.Model;\r\n\r\n var res = 0;\r\n for (var i = 0; i < counts.length; i++) {\r\n if (counts[i]['@DealerId'] == DealerID)\r\n res = counts[i].Dealer['@Count'];\r\n }\r\n return res;\r\n\r\n }\r\n\r\n $scope.global.displayCarCountForDealerNames = function() {\r\n\r\n //don't do anything, if current tab is not 'Name'\r\n if ($scope.tab != 3) {\r\n return;\r\n }\r\n\r\n var $dealers = $('.dl-results').eq(0).find('.dl-result');\r\n\r\n // console.log('$dealers.length', $dealers.length)\r\n\r\n for (var i = 0; i < $dealers.length; i++) {\r\n\r\n $scope.global.displayCarCountForDealer($dealers.eq(i));\r\n\r\n }\r\n\r\n }\r\n\r\n $scope.global.displayCarCountForDealer = function($resultDiv) {\r\n\r\n if ($resultDiv.find('.carCount').text() == '') {\r\n var dealerID = $resultDiv.attr('data-dealerid');\r\n var carCount = ' ';\r\n\r\n // $http.get(\"name-count.json\", {\r\n var usedev = getParameterByName('usedev');\r\n\r\n switch (usedev) {\r\n case '1': \r\n dataURL = 'https://acuracertifieddev.rpa-dev.com';\r\n break;\r\n case '2':\r\n dataURL = 'https://acuracertifieddev2.rpa-dev.com';\r\n break;\r\n default:\r\n dataURL = '';\r\n }\r\n\r\n $http.get(dataURL + \"/api/dealers/getdealerinventory\", {\r\n params: {\r\n dealerid: dealerID,\r\n //search: searchText\r\n }\r\n }).then(function (countRes) {\r\n if (countRes) {\r\n // used to gather count of ModelVINsOnSite\r\n var carCountArray = [];\r\n var sumCarCountArray = 0;\r\n\r\n var countData = countRes.data;\r\n if (countData.Output.Results.Models != null) {\r\n countData = countData.Output.Results.Models.Model;\r\n // console.log('countdata ', countData.length);\r\n \r\n\r\n\r\n //loop all ModelVINsOnSite and add the count to carCountArray\r\n for (var i = 0; i < countData.length; i++) {\r\n carCount = parseInt(countData[i].ModelVINsOnSite['@Count']);\r\n // console.log(dealerID + ' ---- ' + carCount);\r\n //push the count to carCountArray\r\n carCountArray.push(carCount)\r\n }\r\n\r\n // carCount = countData[0].ModelVINsOnSite['@Count']\r\n\r\n\r\n // sum up the count inside the carCountArray\r\n for (var i = 0; i < carCountArray.length; i++) {\r\n sumCarCountArray += carCountArray[i]\r\n }\r\n // console.log('carCountArray ', carCountArray);\r\n // console.log('sumCarCountArray ', sumCarCountArray);\r\n }\r\n\r\n //inject the sum to html\r\n //$resultDiv.find('.carCount').text(sumCarCountArray);\r\n $('.carCount[data-dealerid=\"' + dealerID + '\"]').text(sumCarCountArray);\r\n // console.log($resultDiv, sumCarCountArray);\r\n }\r\n });\r\n $resultDiv.find('.carCount').text(carCount);\r\n }\r\n }\r\n\r\n $scope.global.getHasBuyOnline = function(dealer){\r\n let hasCode = false;\r\n\r\n if (dealer.DealerAttributes.DealerAttribute === undefined) return hasCode;\r\n\r\n let totalAtr = dealer.DealerAttributes.DealerAttribute;\r\n\r\n if (totalAtr.length <= 0) return hasCode;\r\n\r\n for (let i = 0; i < totalAtr.length; i++) {\r\n const element = totalAtr[i];\r\n \r\n if (element.Code == \"CO\") {\r\n hasCode = true;\r\n break;\r\n }\r\n }\r\n\r\n return hasCode;\r\n }\r\n\r\n //validate zip based on length\r\n $scope.global.validateZip = function(zip) {\r\n return zip && zip.length == 5;\r\n }\r\n}]);","var geoDebug = false;\r\nvar debug = false;\r\nvar errMsgCopy = 'No results found. Please try again'\r\nvar firstLoad = true;\r\nvar BingMapKey = bingMapsAPIKey;\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction zipToString(zip) {\r\n var strZip = (zip || '').toString();\r\n if (strZip.length > 0 && strZip.length < 5) {\r\n strZip = ('0000' + strZip).substring(4 + strZip.length - 5);\r\n }\r\n return strZip;\r\n}\r\n\r\n\r\n// 3 start -----------------------------------------------------------------------------\r\n\r\nvar DealerLocator = function() {\r\n this._vars = {\r\n //isLoading: true,\r\n map: 'xxxx',\r\n infobox: null,\r\n pushpins: [],\r\n //isRangeSliderChanging: null,\r\n //rangeChangeTimeout: null,\r\n //lastZoomLevel: null,\r\n userChangedZoom: false,\r\n pinIcon: '/public/images/dealer-locator/map-pin.png',\r\n pinIconActive: '/public/images/dealer-locator/map-pin-active.png'\r\n };\r\n\r\n var _vars = this._vars;\r\n\r\n // Elements\r\n this._elements = {\r\n mapPanel: document.getElementsByClassName('map-panel')[0]\r\n };\r\n\r\n this.initPage = function(zip) {\r\n dl.initMap(function() {\r\n\r\n //if zip value present, then load data\r\n //otherwise wait for zipcode to become available\r\n\r\n zip = ngScope().tZip.inputZip || zip;\r\n if (zip) {\r\n dl_getLatLon(zip, function(lat, lon) {\r\n\r\n //tracking\r\n callFloodlight('dealer-locator-results');\r\n\r\n ngScope().tZip.getData();\r\n _vars.isLoading = false;\r\n });\r\n\r\n } else {\r\n debug && console.log('Zip code not available. Cannot proceed.');\r\n }\r\n\r\n $('.spinner').hide();\r\n });\r\n }\r\n\r\n this.initMap = function(callback) {\r\n\r\n if (!Microsoft) {\r\n return;\r\n }\r\n\r\n dl._vars.map = new Microsoft.Maps.Map(dl._elements.mapPanel, {\r\n credentials: BingMapKey,\r\n showDashboard: true,\r\n showLocateMeButton: false,\r\n showMapTypeSelector: false,\r\n enableClickableLogo: false,\r\n enableSearchLogo: false,\r\n showCopyright: false,\r\n showScalebar: false\r\n });\r\n\r\n\r\n //if (localStorageGetItemCommon('_GeoTempLat') && localStorageGetItemCommon('_GeoTempLong')) {\r\n // this.centerMap(localStorageGetItemCommon('_GeoTempLat'), localStorageGetItemCommon('_GeoTempLong'));\r\n //}\r\n\r\n dl._vars.infobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), {\r\n visible: false\r\n });\r\n dl._vars.infobox.setMap(dl._vars.map);\r\n\r\n //load other bing modules\r\n Microsoft.Maps.loadModule(\"Microsoft.Maps.SpatialMath\", function() {\r\n\r\n Microsoft.Maps.loadModule(\"Microsoft.Maps.Clustering\", function() {\r\n\r\n callback && callback();\r\n });\r\n\r\n\r\n });\r\n\r\n Microsoft.Maps.Events.addHandler(dl._vars.map, 'viewchangeend', function(e) {\r\n dl.onMapMoved(e);\r\n });\r\n\r\n }\r\n\r\n this.centerMap = function(lat, lon) {\r\n dl._vars.map.setView({\r\n center: new Microsoft.Maps.Location(lat, lon)\r\n });\r\n }\r\n\r\n this.clearMapPins = function() {\r\n for (var i = _vars.map.entities.getLength() - 1; i >= 0; i--) {\r\n var pushpin = _vars.map.entities.get(i);\r\n if (pushpin instanceof Microsoft.Maps.Pushpin) {\r\n _vars.map.entities.removeAt(i);\r\n };\r\n }\r\n _vars.map.layers.clear();\r\n _vars.pushpins = [];\r\n }\r\n\r\n this.addPinToMap = function(lat, lon, pinNumber, name, distance, carCount, dealerId, dealerHasBuyOnline) {\r\n\r\n if (lat == null || lon == null) return;\r\n\r\n //create pushpin\r\n var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(lat, lon));\r\n pushpin && pushpin.setOptions({\r\n width: 48,\r\n height: 48,\r\n visible: true,\r\n typeName: pinNumber + '_pin',\r\n icon: dl._vars.pinIcon,\r\n text: pinNumber.toString()\r\n });\r\n\r\n //add other info to pin\r\n pushpin.metadata = {\r\n description: '

' + name + '

' + distance + ' miles away
' + carCount + ' cars
',\r\n pinNumber: pinNumber,\r\n dealerName: name,\r\n dealerId: dealerId,\r\n dealerDistance: distance,\r\n dealerHasBuyOnline: dealerHasBuyOnline,\r\n };\r\n\r\n //save to common var\r\n _vars.pushpins[pinNumber] = pushpin;\r\n\r\n\r\n //event handlers -\r\n\r\n //on hover, change icon color and .active corresponding search result\r\n Microsoft.Maps.Events.addHandler(pushpin, 'mouseover', function(e) {\r\n e.target.setOptions({\r\n icon: _vars.pinIconActive\r\n });\r\n dl.showInfoBox(e.target, false);\r\n });\r\n\r\n //on hover end, change icon color back and remove .active status from search result\r\n Microsoft.Maps.Events.addHandler(pushpin, 'mouseout', function(e) {\r\n\r\n if ($('.MicrosoftMap .Infobox:visible').length == 0) {\r\n e.target.setOptions({\r\n icon: dl._vars.pinIcon\r\n });\r\n }\r\n\r\n if ((!_vars.infobox.metadata || _vars.infobox.metadata.clicked == false)) {\r\n dl.hideInfoBox(e.target);\r\n }\r\n });\r\n\r\n //on clicking pin, scroll search result to top\r\n Microsoft.Maps.Events.addHandler(pushpin, 'click', function(e) {\r\n const { pinNumber, dealerName, dealerId, dealerDistance, dealerHasBuyOnline } = e.target.metadata;\r\n //tracking\r\n if(typeof window.TapLocatorMapFuntions === \"function\") {\r\n const options = {\r\n \"context\": \"map_pin\",\r\n \"dealers_position\": pinNumber,\r\n \"selected_dealer_name\": dealerName,\r\n \"selected_dealer_id\": dealerId,\r\n \"selected_dealer_distance\": dealerDistance,\r\n \"action_label\": pinNumber,\r\n }\r\n if (dealerHasBuyOnline) {\r\n options['options'] = ['buy_online'];\r\n } \r\n window.TapLocatorMapFuntions(options);\r\n }\r\n\r\n if ($(window).outerWidth() < 768) {\r\n $('.dl-result[data-pinnumber=' + pinNumber + ']').eq(1).click();\r\n } else {\r\n $('.dl-result[data-pinnumber=' + pinNumber + ']').eq(0).click();\r\n }\r\n });\r\n\r\n // add pin to map\r\n _vars.map.entities.push(pushpin);\r\n }\r\n\r\n //on clicking search result, scroll it to top\r\n $('body').on('click', '.dl-result', function() {\r\n\r\n var $outer = $(this).closest('.dl-results');\r\n var scrollTop = $outer.scrollTop() - $outer.offset().top + $(this).offset().top;\r\n\r\n if ($(window).outerWidth() < 768) {\r\n\r\n $(\"body\").animate({\r\n scrollTop: scrollTop\r\n }, 250, function() {\r\n $(\"body\").clearQueue();\r\n });\r\n } else {\r\n\r\n $outer.animate({\r\n scrollTop: scrollTop\r\n }, 250);\r\n }\r\n });\r\n\r\n //make search result .active for a particular pin. \r\n //Doesn't show the 'Infobox' now. Using older name without change.\r\n this.showInfoBox = function(pin, isClicked) {\r\n\r\n //.active search result\r\n $('.dl-result').removeClass('active')\r\n .filter('[data-pinnumber=' + pin.metadata.pinNumber + ']').addClass('active');\r\n\r\n for (var i = 0; i < _vars.pushpins.length; i++) {\r\n var _pin = _vars.pushpins[i];\r\n _pin && _pin.setOptions({\r\n icon: _vars.pinIcon\r\n });\r\n }\r\n\r\n pin && pin.setOptions({\r\n icon: _vars.pinIconActive,\r\n });\r\n }\r\n\r\n this.hideInfoBox = function(pin) {\r\n $('.search-result').removeClass('active');\r\n\r\n pin && pin.setOptions({\r\n icon: _vars.pinIcon,\r\n });\r\n }\r\n\r\n this.onMapMoved = function(e) {\r\n\r\n if (dl._vars.isLoading) return;\r\n\r\n //When only the zoom level changed\r\n var currentZoomLevel = dl._vars.map.getZoom();\r\n if (dl._vars.lastZoomLevel != currentZoomLevel) {\r\n dl._vars.lastZoomLevel = currentZoomLevel;\r\n dl._vars.userChangedZoom = true;\r\n\r\n return;\r\n }\r\n\r\n if (dl._vars.isRangeSliderChanging == true) {\r\n //if event was triggered due to slider change, then ignore it\r\n return;\r\n }\r\n\r\n var center = dl._vars.map.getCenter();\r\n\r\n dl_getPinCode(center.latitude, center.longitude, function(res, lat, lon, address) {\r\n debug && console.log(res);\r\n\r\n if (address && address.countryRegion && address.countryRegion != \"United States\") {\r\n return;\r\n }\r\n });\r\n }\r\n\r\n //this.refreshData = function (fromCache) {\r\n // //clearTimeout(_vars.rangeChangeTimeout);\r\n // //_vars.isRangeSliderChanging = true;\r\n // //_vars.rangeChangeTimeout = setTimeout(function () {\r\n // // _vars.isRangeSliderChanging = false;\r\n // //}, 500);\r\n\r\n // //if (fromCache !== true) {\r\n // var center = _vars.map.getCenter();\r\n // dl_getPinCode(center.latitude, center.longitude, function (res) {\r\n // angular.element(document.querySelector('#search-radius-slider')).scope().loadDealers(center.latitude, center.longitude, res);\r\n // });\r\n // //} else {\r\n // // ngScope().filterDealers();\r\n // //}\r\n //}\r\n\r\n // repositions the map when pins are added.\r\n // doesn't draw any circle. Using older name without change\r\n this.drawMapCircleRange = function(lat, lon, miles) {\r\n\r\n if (lat == null) {\r\n var center = _vars.map.getCenter();\r\n\r\n lat = center.latitude;\r\n lon = center.longitude;\r\n }\r\n\r\n //calculate lat, lon for correct zoom\r\n var bounds = [];\r\n var bound;\r\n\r\n bound = dl.addMilesToLocation(lat, lon, miles);\r\n bounds.push(new Microsoft.Maps.Location(bound.lat, bound.lon));\r\n //dl.addPinToMap(bound.lat, bound.lon, 'X');\r\n\r\n bound = dl.addMilesToLocation(lat, lon, miles * -1);\r\n bounds.push(new Microsoft.Maps.Location(bound.lat, bound.lon));\r\n //dl.addPinToMap(bound.lat, bound.lon, 'X');\r\n\r\n var bestview = Microsoft.Maps.LocationRect.fromLocations(bounds);\r\n _vars.map.setView({\r\n bounds: bestview\r\n });\r\n }\r\n\r\n //add miles based on lat lon. Used in above function\r\n this.addMilesToLocation = function(lat, lon, miles) {\r\n lat = Number(lat);\r\n lon = Number(lon);\r\n\r\n var meters = miles * 1609.344;\r\n var coef = meters * 0.0000089;\r\n var new_lat = lat + coef;\r\n var new_long = lon + coef / Math.cos(lat * 0.018);\r\n var newLoc = {\r\n lat: new_lat,\r\n lon: new_long\r\n };\r\n\r\n return newLoc;\r\n }\r\n\r\n this.saveLatLong = function(lat, lon) {\r\n localStorageSetItemCommon(\"_GeoTempLat\", lat);\r\n localStorageSetItemCommon(\"_GeoTempLong\", lon);\r\n }\r\n\r\n\r\n //autocomplete \r\n $('#nameInput').on('focus click', function(e) {\r\n e.stopPropagation();\r\n\r\n if (ngScope().global.allDealers.length == 0) {\r\n ngScope().global.getData($('#zipCodeInput').val() || ZipStorage.getZip());\r\n }\r\n\r\n if ((ngScope().tName.inputName || '').length > 0) {\r\n $('.search-name-autocomplete').show();\r\n } else {\r\n return;\r\n }\r\n\r\n ngScope().global.filterDealers();\r\n });\r\n\r\n $('.search-name-autocomplete').on('click', '.search-name-autocomplete-item', function(e) {\r\n\r\n //tracking\r\n _satellite.track('dealerlocator_search_namesubmit');\r\n\r\n var $e = $(e.target);\r\n\r\n ngScope().tName.inputName = $e.text();\r\n ngScope().global.filterDealers();\r\n\r\n $('.search-name-autocomplete').hide();\r\n\r\n $('#nameSubmit').click();\r\n\r\n\r\n });\r\n $('body').on('click', function() {\r\n $('.search-name-autocomplete').hide();\r\n })\r\n $('#nameInput').on('input', function() {\r\n\r\n if (($(this).val() || '').length > 0) {\r\n $('.search-name-autocomplete').show();\r\n }\r\n\r\n ngScope().global.filterDealers();\r\n\r\n if (ngScope().global.filteredDealers.length == 0) {\r\n ngScope().global.showTabError(ngScope().tName, 'No results found. Please try again');\r\n } else {\r\n ngScope().global.hideTabError(ngScope().tName);\r\n }\r\n });\r\n\r\n //detect my location\r\n $('#dl-geo-mobile').on('click', function() {\r\n dl_getLocation();\r\n });\r\n}\r\n\r\n//init dl\r\nvar dl = new DealerLocator();\r\n\r\n//init page. called when bing script is loaded\r\nfunction initPage() {\r\n var localStorageZip = ZipStorage.getZip();\r\n dl.initPage(localStorageZip);\r\n}\r\n\r\n$(function() {\r\n\r\n ZipStorage.onZipReady(function() {\r\n\r\n // console.log('app.zipReady triggered');\r\n\r\n var $scope = ngScope();\r\n var localStorageZip = ZipStorage.getZip();\r\n\r\n $scope.tZip.inputZip = localStorageZip;\r\n\r\n if (!$scope.$$phase) {\r\n $scope.$apply();\r\n }\r\n\r\n $scope.global.zipOverlaySubmit()\r\n });\r\n\r\n\r\n\r\n\r\n\r\n $('#zipCodeInput, #dl-no-zip-input, #dl-no-zip-input-mobile, #cityStateInput, #state, #nameInput').on('click', function(e) {\r\n\r\n $(this).removeClass('dl-zip-error');\r\n\r\n });\r\n});\r\n\r\n\r\n$(function() {\r\n //sticky map on mobile\r\n // Check the initial Poistion of the map\r\n var dlmap = 350; //$('#dl-map').offset().top;\r\n\r\n $(window).scroll(function() {\r\n //console.log($(window).scrollTop() )\r\n\r\n if ($(window).scrollTop() > dlmap - 50 && $(window).outerWidth() < 768) {\r\n $('#dl-map').addClass(\"dl-map-fixed\");\r\n } else {\r\n $('#dl-map').removeClass(\"dl-map-fixed\");\r\n }\r\n });\r\n});\r\n\r\n\r\n// 2 start ----------------------------------------------------------------------------------------\r\n\r\n\r\n//returns angular $scope for dlTabController\r\n//moved\r\n\r\n// Filter/Format zipcode\r\n// moved\r\n\r\n//tabs module\r\n//moved\r\n\r\n//Zip tab\r\n//moved\r\n\r\n//City-State tab\r\n// moved\r\n\r\n//Name tab\r\n//moved\r\n\r\n\r\n// Filter/Format Phonenumbers\r\n// moved\r\n\r\n//only 5 digits for zip input\r\n// moved\r\n \r\n//auto complete for name search\r\nvar ac_ele = {\r\n input: document.getElementById('nameInput'),\r\n list: document.getElementById('autocomplete-list')\r\n}\r\n\r\n $(document).ready(function() {\r\n//View inventory click Tracking\r\n $(document.body).on('click', '.dl-result-btn', function(e) {\r\n\r\n _satellite.track('dealerlocator_results_inventory');\r\n });\r\n\r\n\r\n $(document.body).on('keydown', '.seeMoreBtn', function(e) {\r\n e.preventDefault();\r\n if (e.key === 'Enter') {\r\n $(this).trigger('click');\r\n }\r\n \r\n });\r\n\r\n\r\n// Input only accept numbers || 'e'\r\n\r\n $(\"#zipCodeInput\").keydown(function (e) {\r\n // Allow: backspace, delete, tab, escape, enter and .\r\n if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||\r\n // Allow: Ctrl+A, Command+A\r\n (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true)) || \r\n // Allow: home, end, left, right, down, up\r\n (e.keyCode >= 35 && e.keyCode <= 40)) {\r\n // let it happen, don't do anything\r\n return;\r\n }\r\n\r\n //stop 'e'\r\n if(e.keyCode == 60){e.preventDefault();}\r\n // Ensure that it is a number and stop the keypress\r\n if (((e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105 )) {\r\n $('#output').html(e.keyCode)\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n\r\n /* name search auto complete */\r\n var isHandlingEvent = false;\r\n ac_ele.input.addEventListener('keydown', function(event) {\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n if (!isHandlingEvent) {\r\n isHandlingEvent = true;\r\n var firstOption = ac_ele.list.querySelector('li');\r\n if (firstOption) {\r\n firstOption.focus();\r\n }\r\n isHandlingEvent = false;\r\n }\r\n }\r\n });\r\n\r\n $(ac_ele.list).on('keydown', function(event) {\r\n // ac_ele.list.addEventListener('keyup', function(event) {\r\n var currentOption = document.activeElement;\r\n var nextOption;\r\n var lastdirection = 'down';\r\n event.preventDefault();\r\n \r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n if (!isHandlingEvent) {\r\n isHandlingEvent = true;\r\n nextOption = currentOption.nextElementSibling;\r\n isHandlingEvent = false;\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n if (!isHandlingEvent) {\r\n isHandlingEvent = true;\r\n nextOption = currentOption.previousElementSibling;\r\n isHandlingEvent = false;\r\n lastdirection = 'up'\r\n }\r\n } else if (event.key === 'Enter') {\r\n $(currentOption).trigger('click');\r\n }\r\n \r\n if (nextOption) {\r\n currentOption.setAttribute('tabindex', '-1');\r\n nextOption.focus();\r\n } else {\r\n currentOption.setAttribute('tabindex', '-1');\r\n if (lastdirection === 'down') {\r\n nextOption = $('#autocomplete-list li:first');\r\n } else {\r\n nextOption = $('#autocomplete-list li:last');\r\n }\r\n // console.log('out range, loop to',nextOption)\r\n nextOption.focus();\r\n }\r\n });\r\n\r\n\r\n});\r\n\r\n// temporarily ignore 404 from endpoints\r\n// tabApp.config(($httpProvider) => {\r\n// $httpProvider.interceptors.push(function($q) {\r\n// return {\r\n// responseError(response) {\r\n// if (response.status === 404) {\r\n// return response;\r\n// }\r\n// }\r\n// };\r\n// });\r\n// });","//ajax caller\r\nfunction dl_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 dl_onApiSuccess && dl_onApiSuccess();\r\n },\r\n error: function(e) {\r\n geoDebug && console.log(e.statusText);\r\n dl_onApiError();\r\n }\r\n });\r\n};\r\n\r\nfunction dl_getLatLonFromQuery(query, callback) {\r\n geoDebug && console.log('query:', query);\r\n dl_CallRestService('https://dev.virtualearth.net/REST/v1/Locations?q=' + encodeURIComponent(query) + '&key=' + BingMapKey,\r\n\r\n function(res) {\r\n\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0) {\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 dl_onApiSuccess();\r\n } else {\r\n geoDebug && console.log('dl_getLatLonFromQuery: Not match found!');\r\n //callback();\r\n dl_onApiError();\r\n }\r\n })\r\n}\r\n\r\nfunction dl_getPinCode(lat, lon, callback) {\r\n\r\n dl_CallRestService('https://dev.virtualearth.net/REST/v1/Locations/' + lat + ',' + lon + '?key=' + BingMapKey,\r\n\r\n function(res) {\r\n //geoDebug && console.log('dl_getPinCode:', res);\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0 && res.resourceSets[0].resources[0].address.postalCode != null) {\r\n callback && callback(res.resourceSets[0].resources[0].address.postalCode, lat, lon, res.resourceSets[0].resources[0].address);\r\n dl_onApiSuccess();\r\n } else {\r\n geoDebug && console.log('dl_getPinCode: Not match found!');\r\n //callback(null, lat, lon);\r\n dl_onApiError();\r\n }\r\n })\r\n}\r\n\r\nfunction dl_getLatLon(zip, callback) {\r\n\r\n dl_CallRestService('https://dev.virtualearth.net/REST/v1/Locations?postalCode=' + zip + '&key=' + BingMapKey,\r\n\r\n function(res) {\r\n //geoDebug && console.log('dl_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 dl_onApiSuccess();\r\n } else {\r\n geoDebug && console.log('dl_getLatLon: Not match found!');\r\n //callback();\r\n dl_onApiError();\r\n }\r\n })\r\n}\r\n\r\nvar dl_onApiSuccess = function() {\r\n\r\n}\r\n\r\nvar dl_onApiError = function() {\r\n\r\n}\r\n\r\n// get current user location from browser\r\nvar dl_getLocation = function() {\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\r\n // get lat/long then call 'geolocator.setPositions()'\r\n // Only works in 'localhost' or 'https'\r\n\r\n navigator.geolocation.getCurrentPosition(\r\n\r\n //on success\r\n function(position) {\r\n\r\n // get zip from detected lat/lon\r\n dl_getPinCode(position.coords.latitude, position.coords.longitude, function(zip) {\r\n\r\n //display the zip in textbox\r\n ngScope().tZip.inputZip = zip || '';\r\n\r\n if (!ngScope().$$phase) {\r\n ngScope().$apply();\r\n }\r\n\r\n ngScope().global.zipOverlaySubmit();\r\n });\r\n\r\n }\r\n\r\n //on block/error\r\n ,\r\n function() {\r\n ngScope().global.showTabError(ngScope().tZip, 'Location couldn\\'t be detected.');\r\n }\r\n\r\n , {\r\n timeout: 30000,\r\n enableHighAccuracy: true,\r\n maximumAge: 75000\r\n });\r\n }\r\n}","var commonStorage = new function() {\r\n this.getCookie = function(key) {\r\n\r\n var _currentCookie = Cookies.get(key);\r\n //console.log('Cookies.get 1086: ' + _currentCookie)\r\n if (_currentCookie !== \"undefined\") {\r\n return Cookies.get(key)\r\n } else {\r\n return;\r\n }\r\n\r\n }\r\n this.setCookie = function(key, value) {\r\n //console.log('1030: setCookie')\r\n Cookies.set(key, value);\r\n\r\n }\r\n};\r\n\r\n//global function to setitem in localstorage\r\nfunction localStorageSetItemCommon(key, value) {\r\n\r\n if (key == \"_GeoCurrentZipCode\") {\r\n value = zipToString(value);\r\n }\r\n\r\n commonStorage.setCookie(key, value);\r\n};\r\n\r\n//global function to getitem in localstorage\r\nfunction localStorageGetItemCommon(key) {\r\n return commonStorage.getCookie(key);\r\n};","function validateInput(id) {\r\n\r\n var $e = $('#' + id);\r\n var val = $e.val() || '';\r\n\r\n var isError = false;\r\n var _ErrorClass = 'dl-zip-error';\r\n var _ErrorMessage = 'The zip code entered was invalid. Please try again.';\r\n\r\n if (val.length <= 0) {\r\n isError = true;\r\n $e.addClass(_ErrorClass);\r\n $e.focus();\r\n $('#tabZipError').html(_ErrorMessage);\r\n } else {\r\n $e.removeClass(_ErrorClass);\r\n $('#tabZipError').html('');\r\n }\r\n\r\n if ((id == 'zipCodeInput' || id == 'dl-no-zip-input' || id == 'dl-no-zip-input-mobile')) {\r\n\r\n if (val.length != 5) {\r\n isError = true;\r\n $e.addClass(_ErrorClass);\r\n $e.focus();\r\n $('#tabZipError').html(_ErrorMessage);\r\n } else {\r\n $e.removeClass(_ErrorClass);\r\n $('#tabZipError').html('');\r\n }\r\n }\r\n\r\n return !isError;\r\n};\r\n\r\n\r\n\r\n//only 5 digits for zip input\r\n$(function () {\r\n $('#zipCodeInput, #dl-no-zip-input-mobile, #dl-no-zip-input').on('input', function () {\r\n var e = this;\r\n if (e.value.length > e.maxLength) e.value = e.value.slice(0, e.maxLength);\r\n });\r\n});","//City-State tab\r\ntabApp.controller('tabCSController', ['$scope', '$http', function($scope, $http) {\r\n\r\n $scope.tCS.getData = function() {\r\n\r\n $scope.global.hideTabError($scope.tCS);\r\n $scope.global.loadedDealers = [];\r\n\r\n var city = $scope.tCS.inputCity,\r\n state = $scope.tCS.inputState;\r\n\r\n //$scope.global.allDealers = [];\r\n $scope.global.filteredDealers = [];\r\n //$scope.global.filterDealers();\r\n $scope.global.locationLabel = (city || \"\") + ', ' + (state || \"\");\r\n\r\n if (!validateInput('cityStateInput') | !validateInput('state')) {\r\n if (!validateInput('cityStateInput')) {\r\n $('#cityStateInput').focus();\r\n }\r\n $scope.tCS.isError = true;\r\n return;\r\n } else {\r\n $scope.tCS.isError = false;\r\n }\r\n\r\n //get zip from city, state\r\n dl_getLatLonFromQuery(city + ', ' + state + ', United States', function(lat, lon) {\r\n\r\n dl_getPinCode(lat, lon, function(zip, lat, lon, address) {\r\n\r\n if ((address && address.countryRegion && address.countryRegion != \"United States\") || (zip || '').length != 5) {\r\n $scope.global.showTabError($scope.tCS, 'No results found. Please try again');\r\n return;\r\n }\r\n\r\n //load data\r\n $scope.global.locationLabel = zip;\r\n $scope.tZip.inputZip = zip;\r\n $scope.global.getData(zip, $scope.tCS);\r\n\r\n ZipStorage.setZip(zip);\r\n\r\n //tracking\r\n _satellite.track('dealerlocator_search_citystatesubmit');\r\n });\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n}]);","//Name tab\r\ntabApp.controller('tabNameController', ['$scope', '$http', function($scope, $http) {\r\n\r\n $scope.tName.getData = function() {\r\n\r\n $scope.global.hideTabError($scope.tName);\r\n $scope.global.loadedDealers = [];\r\n\r\n var name = $scope.tName.inputName;\r\n if (!validateInput('nameInput')) {\r\n $scope.tName.isError = true;\r\n // $scope.global.showTabError($scope.tName, 'No results found. Please try again');\r\n return;\r\n } else {\r\n $scope.tName.isError = false;\r\n }\r\n\r\n var zip = $scope.global.locationLabel;\r\n $scope.global.getDataForName(zip);\r\n\r\n }\r\n\r\n}]);","// zip tab\r\ntabApp.controller('tabZipController', ['$scope', '$http', '$timeout', function($scope, $http, $timeout) {\r\n\r\n //onLoad apply zip\r\n var initialZip = ZipStorage.getZip();\r\n $scope.tZip.inputZip = initialZip;\r\n\r\n var strZip = (initialZip || '').toString();\r\n if (strZip.length > 0 && strZip.length < 5) {\r\n strZip = ('0000' + strZip).substring(4 + strZip.length - 5);\r\n $timeout(function() {\r\n $('#zipCodeInput').val(strZip);\r\n }, 200);\r\n }\r\n $scope.global.locationLabel = strZip;\r\n\r\n //show/hide overlay\r\n if (!initialZip) {\r\n $('#dl-zip-off').show();\r\n //$('#dl-zip-on').hide();\r\n } else {\r\n $('#dl-zip-off').hide();\r\n $('#dl-zip-on').show();\r\n }\r\n\r\n $scope.tZip.getData = function() {\r\n\r\n $scope.global.hideTabError($scope.tZip);\r\n $scope.global.loadedDealers = [];\r\n\r\n //$scope.global.allDealers = [];\r\n $scope.global.filteredDealers = [];\r\n\r\n //validate zip\r\n var zip = $scope.tZip.inputZip;\r\n if (!validateInput('zipCodeInput')) {\r\n // console.log(validateInput('zipCodeInput'))\r\n //$scope.global.showTabError($scope.tZip, 'No results found. Please try again');\r\n $scope.tZip.isError = true;\r\n return;\r\n } else {\r\n $scope.tZip.isError = false;\r\n }\r\n\r\n $scope.global.locationLabel = zip;\r\n\r\n // load data\r\n $scope.global.getData(zip, $scope.tZip);\r\n\r\n ZipStorage.setZip(zip);\r\n\r\n // only fire tracking on user click not page load\r\n if (!firstLoad) {\r\n // tracking\r\n _satellite.track('dealerlocator_search_zipsubmit');\r\n }\r\n firstLoad = false;\r\n }\r\n\r\n}]);","// Filter/Format Phonenumbers\r\ntabApp.filter('phoneNumber', function() {\r\n return function(number) {\r\n if (!number) {\r\n return '';\r\n }\r\n number = String(number);\r\n number = number.replace(/[^0-9]*/g, '');\r\n var formattedNumber = number;\r\n\r\n var c = (number[0] == '1') ? '1' : '';\r\n number = number[0] == '1' ? number.slice(1) : number;\r\n\r\n var area = number.substring(0, 3);\r\n var front = number.substring(3, 6);\r\n var end = number.substring(6, 10);\r\n\r\n if (front) {\r\n formattedNumber = (c + \"(\" + area + \") \" + front);\r\n }\r\n if (end) {\r\n formattedNumber += (\"-\" + end);\r\n }\r\n return formattedNumber;\r\n };\r\n});","// Filter/Redirect.html\r\ntabApp.filter('redirectHttps', function() {\r\n return function(url) {\r\n if (!url) {\r\n return '';\r\n }\r\n var newURL;\r\n // check if URL is http or https\r\n // First: handle http\r\n if (url.indexOf('https') < 0) {\r\n newURL = 'http://' + window.location.hostname + '/redirect.html?ref=' + url \r\n }\r\n // Second: Handle https\r\n else {\r\n return url\r\n }\r\n\r\n return newURL;\r\n };\r\n}); ","tabApp.filter('zipcodeFormat', function() {\r\n return function(input) {\r\n if (!input) {\r\n return input;\r\n }\r\n if (input.toString().length === 9) {\r\n return input.toString().slice(0, 5) + \"-\" + input.toString().slice(5);\r\n } else if (input.toString().length === 5) {\r\n return input.toString();\r\n } else {\r\n return input;\r\n }\r\n };\r\n});"]}