Campers Inn RV of Merrimack has the best selection of used RVs in New Hampshire. Our Pre-Owned Peace-of-Mind Promise means we thoroughly inspect all used RVs inside and out. You can be confident knowing all of our stock meets our high standards, and you don’t have to sacrifice quality for price. Our inventory of used motorhomes, travel trailers and fifth wheel campers changes daily, so contact us with any questions or to learn about the latest RVs on our lot.
Click here to visit our resource center which is packed with expert advice and RV shopping, maintenance and travel.
Showing 1 - 40 of 54
Change Location
Filter
Favorites ()
Expandable
-
Used 2016 Forest River RV Rockwood Roo 233S
Stock #86932A
Merrimack NH
Previous Next
- +49
- View More »
Used 2016 Forest River RV Rockwood Roo 233S
Stock #86932A
Merrimack NH
- Sleeps 9
- 1 Slides
- 25ft long
- 4786 lbs
- U Shaped Dinette
...View Floorplan
- List: $15,995
- You Save: $2,009
- Sale Price: $13,986
Go Camping For Less! $127 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2021 Jayco Jay Feather 17Z
Stock #87888A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +38
- View More »
Used 2021 Jayco Jay Feather 17Z
Stock #87888A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 6
- 19ft long
- 3400 lbs
- List: $21,986
- You Save: $3,000
- Sale Price: $18,986
Go Camping For Less! $173 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
Travel Trailer
-
Used 2017 Airstream RV Classic M-30
Stock #77734P
Merrimack NH
Pre Owned Promise Multi Point Pre-Delivery Inspection ~ Ask for details!
Previous Next
- +44
- View More »
Used 2017 Airstream RV Classic M-30
Stock #77734P
Merrimack NH
Pre Owned Promise Multi Point Pre-Delivery Inspection ~ Ask for details!
- Sleeps 5
- 31ft long
- 7365 lbs
- Front Living
- Rear Bedroom
...View Floorplan
- List: $124,986
- You Save: $24,991
- Sale Price: $99,995
Go Camping For Less! $719 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2022 Forest River RV Independence Trail 188DBK
Stock #85347A
Merrimack NH
Previous Next
- +39
- View More »
Used 2022 Forest River RV Independence Trail 188DBK
Stock #85347A
Merrimack NH
- Sleeps 4
- 22ft long
- 3864 lbs
- Bunkhouse
- Outdoor Kitchen
...View Floorplan
- List: $19,995
- You Save: $2,009
- Sale Price: $17,986
Go Camping For Less! $164 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2022 Forest River RV Cherokee Wolf Pup 17JG
Stock #95350A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +8
- View More »
Used 2022 Forest River RV Cherokee Wolf Pup 17JG
Stock #95350A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 6
- 1 Slides
- 23ft long
- 3879 lbs
- Bunkhouse
- Outdoor Kitchen
...View Floorplan
- List: $24,995
- You Save: $5,207
- Sale Price: $19,788
Go Camping For Less! $180 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2021 Keystone RV Hideout 250BH
Stock #86063C
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +39
- View More »
Used 2021 Keystone RV Hideout 250BH
Stock #86063C
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 8
- 1 Slides
- 30ft long
- 6077 lbs
- Bunkhouse
- Outdoor Kitchen
...View Floorplan
- List: $24,995
- You Save: $4,169
- Sale Price: $20,826
Go Camping For Less! $190 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2022 Heartland Prowler 315BH
Stock #96123A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +52
- View More »
Used 2022 Heartland Prowler 315BH
Stock #96123A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 8
- 1 Slides
- 37ft long
- 7240 lbs
- Bunkhouse
- Outdoor Kitchen
...View Floorplan
- List: $24,995
- You Save: $3,009
- Sale Price: $21,986
Go Camping For Less! $200 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2019 Cruiser Shadow Cruiser 289RBS
Stock #85585C
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +6
- View More »
Used 2019 Cruiser Shadow Cruiser 289RBS
Stock #85585C
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 7
- 2 Slides
- 35ft long
- 6605 lbs
- Bunkhouse
- Bath and a Half
...View Floorplan
- List: $25,995
- You Save: $3,009
- Sale Price: $22,986
Go Camping For Less! $209 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2022 Forest River RV Apex Nano 213RDS
Stock #86066A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +39
- View More »
Used 2022 Forest River RV Apex Nano 213RDS
Stock #86066A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 5
- 1 Slides
- 25ft long
- 3826 lbs
- Front Bedroom
...View Floorplan
- List: $25,995
- You Save: $2,009
- Sale Price: $23,986
Go Camping For Less! $218 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2022 KZ Connect SE 221FKKSE
Stock #93897A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
Previous Next
- +48
- View More »
Used 2022 KZ Connect SE 221FKKSE
Stock #93897A
Merrimack NH
Pre Owned Promise Multi Point Pre Delivery Inspection. Ask our RV Pros for details.
- Sleeps 2
- 1 Slides
- 27ft long
- 5340 lbs
- Front Kitchen
- Outdoor Kitchen
...View Floorplan
- List: $29,995
- You Save: $3,009
- Sale Price: $26,986
Go Camping For Less! $246 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2022 Forest River RV Cherokee Grey Wolf 29BRB
Stock #85576A
Merrimack NH
Pre Owned Promise Multi Point Pre-Delivery Inspection Ask our RV Pros for details!
Previous Next
- +47
- View More »
Used 2022 Forest River RV Cherokee Grey Wolf 29BRB
Stock #85576A
Merrimack NH
Pre Owned Promise Multi Point Pre-Delivery Inspection Ask our RV Pros for details!
- Sleeps 10
- 1 Slides
- 38ft long
- 6745 lbs
- Bunkhouse
- Outdoor Kitchen
...View Floorplan
- List: $29,995
- You Save: $2,009
- Sale Price: $27,986
Go Camping For Less! $255 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
-
Used 2021 Keystone RV Outback 291UBH
Stock #94403A
Merrimack NH
Pre Owned Promise Multi Point Pre-Delivery Inspection Ask our RV Pros for details!
Previous Next
- +45
- View More »
Used 2021 Keystone RV Outback 291UBH
Stock #94403A
Merrimack NH
Pre Owned Promise Multi Point Pre-Delivery Inspection Ask our RV Pros for details!
- Sleeps 9
- 1 Slides
- 34ft long
- 6869 lbs
- Bunkhouse
- Outdoor Kitchen
...View Floorplan
- List: $32,995
- You Save: $4,574
- Sale Price: $28,421
Go Camping For Less! $259 /mo.
$ Get Internet Price $ View Details »
View Details »
- Value My Trade
- Get Pre-Approved
- Send to Friend
Fifth Wheel
Toy Hauler Travel Trailer
Toy Hauler Fifth Wheel
Motor Home Class A
Motor Home Class A - Diesel
- «
- 1
- 2
- »
Showing 1 - 40 of 54
*All calculated monthly payments are an estimate for qualified buyers only and do not constitute a commitment that financing or a specific interest rate or term is available. Financing terms may not be available in all Campers Inn locations. Campers Inn RV Sales is not responsible for any misprints, typos, or errors found in our website pages. Any price listed excludes sales tax, registration tags, and delivery fees. Manufacturer pictures, specifications, and features may be used in place of actual inventory in stock on our lot. Please contact us for availability as our inventory changes rapidly.
Manufacturer and/or stock photographs may be used and may not be representative of the particular unit being viewed. Where an image has a stock image indicator, please confirm specific unit details with your dealer representative.
Manufacturer and/or stock photographs may be used and may not be representative of the particular unit being viewed. Where an image has a stock image indicator, please confirm specific unit details with your dealer representative.
';}}// add stock number to selected filters if setvar stockNumEl = $('#faceted-search').find('.SearchStockNumber');if (stockNumEl.length > 0 && stockNumEl.val() !== null && stockNumEl.val() !== '') {searchResultsHtml += '
';searchResultsHtml += '
Stock Number
';searchResultsHtml += '
- ';searchResultsHtml += '
- ' + $('').text(stockNumEl.val()).html() + ' '; // html encode stock num valsearchResultsHtml += '
';searchResultsHtml += '
';}$('.selected-filters-wrapper').append(searchResultsHtml);// show/hide clear filters toolbar at the topif ($('.selected-filters-wrapper').html() !== '') {$('.clear-filters-toolbar').fadeIn(200);}else {$('.clear-filters-toolbar').fadeOut(200);}}; // Helper function to be called when the counts shown next to each checkbox and the visibility of checkboxes/sections needs to be updatedvar updateCounts = function() {// Tow Rating addition// over ride control if a tow rating cookie exists// applies to FilteredSearch and UnitList.cshtmlif (window.location.pathname == '/tow-guide-search') {window.Interact.TowRating.checkCookie();// console.log('tow rating cookie check fired');}if (!searchCombos || !searchCombos.length) return;var currentSearchCounts = {normal: searchCombos};for (var prop in searchCombos[0]) {if (prop === 'count') continue;var checkBoxWrapper = $('#faceted-search [data-field-name="' + prop + '"]');var normalCounts = currentSearchCounts['normal'];var currentVals = $.map(($('.ajax-unit-list').ajaxUnitList('getCurrentOpt', prop) || '').split(','), function(x) { return x.toLowerCase(); });if (currentVals[0] !== '') {for (var countGroupName in currentSearchCounts) {currentSearchCounts[countGroupName] = $.grep(currentSearchCounts[countGroupName], function(x, i) {if (multiValueColumns[prop] !== undefined) { var parts = $.map(x[prop].split(multiValueColumns[prop].separator), function (x) { return x.toLowerCase(); }); if (multiValueColumns[prop].filterMode === 'and') { for (var i = 0; i < currentVals.length; i++) { if (currentVals[i] === '') continue; if (parts.indexOf(currentVals[i]) === -1) { return false; } } return true; } else { for (var i = 0; i < currentVals.length; i++) { if (currentVals[i] === '') continue; if (parts.indexOf(currentVals[i]) !== -1) { return true; } } return false; }}else {return currentVals.indexOf(x[prop].toLowerCase()) !== -1;}});}}if (checkBoxWrapper.find('input[type=checkbox]:checked').length) {currentSearchCounts[prop] = normalCounts;}}for (var prop in searchCombos[0]) {if (prop === 'count') continue;var checkBoxWrapper = $('#faceted-search [data-field-name="' + prop + '"]'); var sectionCheckboxes = checkBoxWrapper.find('input[type=checkbox]');// get list of all checked checkbox values in the same section - this is for multivalue columns in 'and' modevar checkedValues = sectionCheckboxes.filter(":checked").map(function(i, x) { return $(x).val(); });sectionCheckboxes.each(function() { var checkboxVal = $(this).val();var countRows = $.grep(currentSearchCounts[prop] || currentSearchCounts['normal'], function(x, i) {if (multiValueColumns[prop] !== undefined) { var currVals = $.map( $.grep(x[prop].split(multiValueColumns[prop].separator),function(z) { return z !== ''; }), function(x) { return x.toLowerCase(); }); if (multiValueColumns[prop].filterMode === 'and') { if (currVals.indexOf(checkboxVal.toLowerCase()) === -1) return false; for (var i = 0; i < checkedValues.length; i++) { if (currVals.indexOf(checkedValues[i].toLowerCase()) === -1) return false; } return true; } else { return currVals.indexOf(checkboxVal.toLowerCase()) !== -1; }}else {return x[prop].toLowerCase() === checkboxVal.toLowerCase();}});var sum = 0;$.each(countRows, (function() {sum += parseInt(this.count, 10);}));var groupWrapper = $(this).closest('.CheckBoxList');var panel = $(this).closest('.panel');if (sum === 0) {$(this).parents('div.checkbox').addClass('hide');// check to see if all checkboxes in the group are hidden, and if so, hide the wrapper panel alsoif (groupWrapper.find('div.checkbox:not(.hide)').length < 1) {panel.addClass('hide');}}else {$(this).parent().find('.count').text(sum);$(this).parents('div.checkbox').removeClass('hide');panel.removeClass('hide');}});}// hide filter containers where there is only one visible checkbox$('#facetedSearch .panel').filter(":not(.hide)").each(function() {var minCheckboxCount = $(this).data('minCheckboxCount') || 2;if ($(this).find('div.checkbox:not(.hide) input[type=checkbox]').length < minCheckboxCount) { $(this).addClass('hide');}}); // setup clear filters sectionupdateClearFiltersSection();};var submitToSearchPage = function(clearCheckboxFilters) {var tmpSearchInputs = $('#faceted-search').find(':input');if (clearCheckboxFilters) {tmpSearchInputs = tmpSearchInputs.filter(':not(input[type=checkbox])');}var tmpSearchValues = tmpSearchInputs.serializeArray();// comma delimit search values with the same namevar searchValMap = {};for (var i = 0; i < tmpSearchValues.length; i++) {var fieldName = tmpSearchValues[i].name.toLowerCase();if (searchValMap[fieldName] !== undefined && searchValMap[fieldName] !== '') {searchValMap[fieldName] += "," + tmpSearchValues[i].value;}else {searchValMap[fieldName] = tmpSearchValues[i].value;}}var searchValues = [];for (var param in searchValMap) {searchValues.push({name: param, value: searchValMap[param]});}var targetPage = '/rv-search';var qMark = window.location.href.indexOf('?');var currentPage = qMark > -1 ? window.location.href.substring(0, qMark) : window.location.href;currentPage = '/' + currentPage.replace(/^(?:\/\/|[^\/]+)*\//, "");var qsValues = getUrlVars();if (currentPage === targetPage && qsValues !== undefined && qsValues !== null) {qsValues.length = 0; // remove the array elements - this is because getUrlVars adds each parameter name using .push(), and it also adds them as properties of the object. we only want the propertiesdelete qsValues['page'];delete qsValues['s'];// remove qs params that are part of the search form - this is particularly important for checkboxes, which would not be included// in the searchValues collection if uncheckedfor (var param in qsValues) {if ($('#faceted-search :input').filter(function() { return ($(this).attr('name') || '').toLowerCase() === param; }).length) {delete qsValues[param];}}// add/update qs params from search valuesfor (var i = 0; i < searchValues.length; i++) {if (searchValues[i].value !== '') {qsValues[searchValues[i].name] = searchValues[i].value;}}var qsArray = [];for (var param in qsValues) {qsArray.push({name: param, value: qsValues[param]});}var qs = $.param(qsArray);window.location = "/rv-search?s=true" + (qs !== "" ? "&" + qs : "");}else {var qs = $.param($.grep(searchValues, function(x) { return x.value !== ''; }));window.location = "/rv-search?s=true" + (qs !== "" ? "&" + qs : "");}};var initializeSearchFields = function(data) {if (data["brand"] !== undefined) {data["brand"] = data["brand"].toLowerCase().trim();}if (data["manufacturer"] !== undefined) {data["manufacturer"] = data["manufacturer"].toLowerCase().trim();}$('#faceted-search :checkbox, #faceted-search :radio').removeAttr("checked"); if (data["zip"] !== undefined) { const zipInput = document.getElementById("locationZip"); if (zipInput) { zipInput.value = data["zip"]; } } if (data["distance"] !== undefined) { const distanceInput = document.getElementById("distanceRange"); if (distanceInput) { distanceInput.value = data["distance"]; } }for (var key in data) {if (data[key] === undefined || !isNaN(key)) {return;}var mVals = data[key].indexOf(',') !== -1 ? mVals = data[key].split(',') : null;$('#faceted-search [name]').filter(function() {return ($(this).attr('name') || '').toLowerCase() === key.toLowerCase();}).each(function(index, el){if ($(el).is(":checkbox") || $(el).is(":radio")) {if (mVals != null) {if ($.inArray($(el).val(), mVals) !== -1) {$(el).attr("checked", "checked");$(el).addClass("value-modified");}}else if ($(el).val() === data[key]) {$(el).attr("checked", "checked");$(el).addClass("value-modified");}}else {$(el).val(data[key]);if (data[key] != '' && $(el).val() === data[key]) {$(el).addClass("value-modified");}}});}// clear the stock number textbox if the stocknumber query string parameter isn't present.// this is needed b/c when the browser back button is clicked back to a point where the// stock number filter isn't set, even though the stocknumber query string parameter is// cleared, some browsers keep the input field filledif (data['stocknumber'] === undefined) {var stockNumEl = $('#faceted-search').find('.SearchStockNumber');stockNumEl.val('');}updateCounts(); };var scrollToListTop = function () {// only scroll to list top if the scroll position is currently below the top of the listif ($("html, body").scrollTop() > $('.ajax-unit-list').offset().top) {$("html, body").animate({ scrollTop: $('.ajax-unit-list').offset().top }, "fast");}};function getResultsFromInputChange(input) {var stockNumEl = $('#faceted-search').find('.SearchStockNumber');if (noResultsMode === false && isListingPage) {const inputGroupName = $(input).attr("name");const checkboxesInGroup = $('#faceted-search').find(':input[name="' + inputGroupName + '"]');// if the only checked checkboxes in this group are hidden, uncheck themconst allCheckedHidden =checkboxesInGroup.filter(":checked").filter(function() { return $(this).parents("div.checkbox:not(.hide)").length > 0}).length < 1;if (allCheckedHidden) {checkboxesInGroup.prop('checked', false);}const newValue = checkboxesInGroup.filter(":checked").map(function(i, v) { return $(this).val() }).toArray().join(",");const updateData = { s: "true" };updateData[inputGroupName] = newValue;$('.ajax-unit-list').ajaxUnitList('update', updateData);scrollToListTop();updateCounts();}else {stockNumEl.val('');submitToSearchPage();}}// setup event handlers$("#faceted-search #facetedSearch input[type=checkbox]").change(function() {getResultsFromInputChange(this);resetLocationFinder();});$('#faceted-search').find('.SearchButton').click(function(e) { e.preventDefault();var stockNumEl = $('#faceted-search').find('.SearchStockNumber');if (isListingPage && !stockNumEl.hasClass('value-modified')) {var stockNum = stockNumEl.val();var updateData = { s: "true" };updateData['stockNumber'] = stockNum;$('.ajax-unit-list').ajaxUnitList('update', updateData); scrollToListTop();updateCounts();} else { gtmAnalyticsEventTrack($(this), 'Interactions', 'StockFilteredSearch', stockNumEl.val(), '1');submitToSearchPage(true);}return false;});var searchFieldChanged = function() {$(this).addClass("value-modified");};$('#faceted-search input, #faceted-search select').change(searchFieldChanged);$('#faceted-search input[type="text"]').keyup(searchFieldChanged);$('#faceted-search').on('submitToSearchPage', submitToSearchPage);$('#faceted-search').on('clearFilters', function() {if ($('input[name=zip]').val() || $('input[name=stockNumber]').val()) {window.location = "/rv-search?s=true";}$('.clear-filters-toolbar').hide();$('#faceted-search').find('input[type=text]').val('');$('#faceted-search').find('input[type=checkbox]').prop('checked', false);$('.ajax-unit-list').ajaxUnitList('clearFilters'); scrollToListTop();updateCounts();}); $('#faceted-search').on('clearSection', function(e, section) {if (section === '.stockNumber') {var stockNumEl = $('#faceted-search').find('.SearchStockNumber');stockNumEl.val('');submitToSearchPage();}else {$('#faceted-search').find(section).find('input[type=checkbox]:checked').prop('checked', false).trigger('change');scrollToListTop();updateCounts();}});$('#faceted-search').on('clearSelection', function(e, section, selection) {$('#faceted-search').find(section).find(' :checkbox[value="' + selection + '"]').prop('checked', false).trigger('change'); scrollToListTop();updateCounts();});$('.ajax-unit-list').on('ajaxUnitList.historychange', function(e, data) {if (data != null) {initializeSearchFields(data);}});$('a.btn-clear-all').click(function(e) {e.preventDefault();$('#faceted-search').trigger('clearFilters');});// setup on initial loadfunction init(doExpand) {if (isListingPage) {var data = $('.ajax-unit-list').ajaxUnitList('getCurrentOpts');if (data != null) {initializeSearchFields(data);}if (doExpand) {$("#facetedSearch .panel-collapse").each(function () {var $this = $(this);if ($this.find(":checked").length) {$this.addClass("in");$this.closest(".panel").find(".panel-heading i").removeClass("fa fa-plus").addClass("fa fa-minus");}});}}}init(true);$("#facetedSearch .panel-heading a").click(function() {var $this = $(this);if ($this.closest(".panel").find(".panel-collapse.in").length) {$this.find("i").removeClass("fa fa-minus").addClass("fa fa-plus");}else {$this.find("i").removeClass("fa fa-plus").addClass("fa fa-minus");}});/////////////////////////// Saved Searches/////////////////////////if ($('div.user-profile-wrapper').data('user-authenticated')) {$('.save-search-toolbar').removeClass('hidden');} const savedSearchPostUrl = '/rebraco/contactsavedsearch/save';var savedSearchId = 0;var savedSearchName = null;var urlParams = getUrlVars();if (urlParams) {savedSearchId = urlParams["savedSearchId"] || 0;if (savedSearchId) {savedSearchName = urlParams["savedSearchName"];$('.save-search-btn').text('Update Saved Search');}}$('.save-search-btn').click(function () { if (!savedSearchName) { savedSearchName = prompt("Enter a name for this saved search:"); } var postData = { contactSavedSearchId: savedSearchId, name: savedSearchName, url: location.href }; $.ajax(savedSearchPostUrl, { data: JSON.stringify(postData), type: 'POST', contentType: 'application/json', success: function (response) { if (response.success) {savedSearchId = response.contactSavedSearchId; $('.save-search-btn').text('Update Saved Search'); alert("Saved successfully"); }else {if (!savedSearchId) {savedSearchName = null; } alert("Save failed"); }},error: function () { if (!savedSearchId) { savedSearchName = null; } alert("Save failed"); } });});/////////////////////////// Mobile Filtered Search/////////////////////////$('.mobile-filter-link').click(function(e){e.preventDefault();$('body').addClass('modal-open');$('#faceted-search').addClass('fs-modal');});$('.fs-done').click(function(e){e.preventDefault();$('body').removeClass('modal-open');$('#faceted-search').removeClass('fs-modal');});$('.fs-clear-filters').click(function(e){e.preventDefault();$('#faceted-search').trigger('clearFilters');});var waitForFinalEvent = (function () {var timers = {};return function (callback, ms, uniqueId) {if (!uniqueId) {uniqueId = "Don't call this twice without a uniqueId";}if (timers[uniqueId]) {clearTimeout(timers[uniqueId]);}timers[uniqueId] = setTimeout(callback, ms);};})();var $mobileSortOptions = $('#faceted-search .mobile-sort-options-wrapper');var $desktopSortOptions = $('.listingToolbar .sort-options-wrapper');var $sortOptions = $('#sortOptions');function filteredSearchResponsiveStuff(initialLoad) {if ($(window).width() <= 991) {if ($mobileSortOptions.find('#sortOptions').length < 1) {$mobileSortOptions.append($sortOptions);}// collapse search panels on mobile, except for those with checked checkboxesif (initialLoad) {$("#facetedSearch .panel-collapse").each(function() {var $this = $(this);if ($this.find(":checked").length < 1) {$this.addClass('collapse').removeClass('in');$this.closest(".panel").find(".panel-heading i").removeClass("fa fa-minus").addClass("fa fa-plus");}});}} else {if ($desktopSortOptions.find('#sortOptions').length < 1) {$desktopSortOptions.append($sortOptions);}}};filteredSearchResponsiveStuff(true);$(window).resize(function () {waitForFinalEvent(function () {filteredSearchResponsiveStuff(false);}, 500, "filteredSearchResize"); }); // exports window.Interact = window.Interact || {}; window.Interact.FilteredSearch = { init: init };});