Welcome to Air Rx Professional Duct Cleaning and Air Solutions, your number one choice for air duct cleaning services in Tyler, TX and the surrounding area! Our mission is to provide our customers with solutions that will provide new life to their air ducts for affordable rates. Our services improve the quality of your home or business's air by reducing the number of allergens and pollutants that get circulated throughout your property.
As a locally owned and operated company, we take great pride in serving our community. With over 5 years of experience, we have the expert knowledge and industry-leading equipment needed to handle a variety of services including:
- Home Air Duct Cleaning
- Commercial Air Duct Cleaning
- Dryer Vent Cleaning
- Indoor Air Quality Testing
- Air Deodorizing
- Whole Home Sanitation
- Air Balancing
- UV Light Installation
- HEPA Filtration Installation
- And More!
We are veteran owned and operated as well, and proudly provide discounts to our veterans. If you are interested in learning more about any of our services, please contact Air Rx Professional Duct Cleaning and Air Solutions for a free consultation and free estimate!
(function() { var ANIMATION_TIME = 500 var baseCss = " \ #housecall-spacer { \ height: 50px;\ }\ \ #housecall-bar {\ z-index: 5000;\ background-color: #616161;\ height: 50px;\ width: 100%;\ text-align: center;\ position: fixed;\ top: 0;\ }\ \ #housecall-button {\ -webkit-appearance: none;\ background-color: #4CAF50;\ border: 2px solid #fff;\ color: #fff;\ cursor: pointer;\ display: inline-block;\ line-height: 1;\ margin: 7px 0 0 0;\ padding: 8px 30px;\ font-family: Roboto, Arial, Sans-Serif;\ text-align: center;\ transition: background-color 300ms ease-out;\ text-decoration: none;\ }\ #housecall-button:hover {\ background-color: #388E3C;\ }"
function parseQueryHcp(query) { var Params = new Object() if (!query) return Params // return empty object var Pairs = query.split(/[;&]/) for (var i = 0; i < Pairs.length; i++) { var KeyVal = Pairs[i].split('=') if (!KeyVal || KeyVal.length != 2) continue var key = unescape(KeyVal[0]) var val = unescape(KeyVal[1]) val = val.replace(/+/g, ' ') Params[key] = val } return Params }
function findScriptParamsHcp() { var scripts = document.getElementsByTagName('script') var params = [] for (i = 0; i < scripts.length; i++) { if (scripts[i].src.match('/BookingBar.js')) { params = parseQueryHcp(scripts[i].src.replace(/^[^\?]+\??/, '')) } } return params }
function addCss(cssCode) { var styleElement = document.createElement("style") styleElement.type = "text/css" if (styleElement.styleSheet) { styleElement.styleSheet.cssText = cssCode } else { styleElement.appendChild(document.createTextNode(cssCode)) } document.getElementsByTagName("head")[0].appendChild(styleElement) }
function loadHousecall() { var params = findScriptParamsHcp() addBookingBar(params) if (params.company) { getReviewsFlyOutSettings(params.company, function(flyOutSettings) { if (flyOutSettings.enabled && flyOutSettings.uuid) { addReviewsFlyOut(flyOutSettings.uuid) } }) } }
function addBookingBar(params) { var div = document.createElement("div") var seoParts = params.path if (seoParts == undefined) { seoParts = 'availability' } var companyId = params.company div.innerHTML = '
' + // gives us some space at the top of the page 'function getReviewsFlyOutSettings(company, callback) { var request = new XMLHttpRequest() request.onreadystatechange = function() { if (isSuccessfulApiCall(this.readyState, this.status)) { try { callback(JSON.parse(this.response)) } catch(e) { callback({}) } } } request.open('GET', 'https://pro.housecallpro.com/alpha/organization/reviews/settings', true) request.setRequestHeader('Authorization', 'Token ' + company) request.send() }
function isSuccessfulApiCall(readyState, status) { return readyState === 4 && status >= 200 && status < 300 }
function addReviewsFlyOut(uuid) { var baseIframeStyles = 'border: none; width: 100%; height: 100%; position: absolute; transition: right ' + ANIMATION_TIME + 'ms cubic-bezier(0, 0, 0.2, 1) 0ms;' var baseBackdropStyles = 'position: fixed; left: 0; top: 0; width: 100vw; height: 100vh; transition: background ' + ANIMATION_TIME + 'ms cubic-bezier(0, 0, 0.2, 1) 0ms; z-index: 2147483646;'
var iframeContainer = createIframeContainer()
var iframe = createIframe(baseIframeStyles, uuid)
iframeContainer.appendChild(iframe)
document.body.appendChild(iframeContainer)
var backdrop = createBackdrop(baseBackdropStyles, function() {
hideIframe(iframe, baseIframeStyles)
hideBackdrop(backdrop, baseBackdropStyles)
})
var openReviewsButton = createOpenReviewsButton(function() {
showIframe(iframe, baseIframeStyles)
showBackdrop(backdrop, baseBackdropStyles)
})
document.body.appendChild(openReviewsButton)
}
function createIframeContainer() { var iframeContainer = document.createElement('div') iframeContainer.style.cssText = 'position: fixed; top: 0; right: 0; width: 500px; height: 100vh; max-width: 75%; overflow-x: hidden; z-index: -2147483647;' return iframeContainer }
function createIframe(baseIframeStyles, uuid) { var iframe = document.createElement('iframe') hideIframe(iframe, baseIframeStyles) iframe.src = 'https://client.housecallpro.com/reviews/reviews/' + uuid + '/' return iframe }
function createBackdrop(baseBackdropStyles, onClick) { var backdrop = document.createElement('div') backdrop.style.cssText = baseBackdropStyles backdrop.onclick = onClick return backdrop }
function createOpenReviewsButton(onClick) { var img = document.createElement('img') img.src = 'https://s3-us-west-1.amazonaws.com/housecall-general/Assets/Community/read-our-reviews.png' img.style.cssText = 'position: fixed; right: 0; bottom: 50%; transform: translateY(50%); height: 100px; cursor: pointer; z-index: 2147483645;' img.alt = 'Read our Reviews' img.onclick = onClick return img }
function showBackdrop(backdrop, baseBackdropStyles) { document.body.appendChild(backdrop) setTimeout(function() { backdrop.style.cssText = baseBackdropStyles + 'background: rgba(0, 0, 0, 0.54);' }) }
function hideBackdrop(backdrop, baseBackdropStyles) { backdrop.style.cssText = baseBackdropStyles + 'background: transparent;' setTimeout(function() { backdrop.parentNode.removeChild(backdrop) }, ANIMATION_TIME) }
function hideIframe(iframe, baseIframeStyles) { iframe.style.cssText = baseIframeStyles + 'right: -500px;' if (iframe.parentNode) { setTimeout(function() { iframe.parentNode.style['z-index'] = -2147483647 }, ANIMATION_TIME) } }
function showIframe(iframe, baseIframeStyles) { iframe.style.cssText = baseIframeStyles + 'right: 0px;' iframe.parentNode.style['z-index'] = 2147483647 }
document.addEventListener('DOMContentLoaded', function () { loadHousecall() }) })()}