var breeze_prefetch = {"local_url":"https://hytekairsystems.com","ignore_remote_prefetch":"1","ignore_list":["wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
https://hytekairsystems.com/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js
Hytek Air Systems · Centennial, CO
What will it actually cost?
Real Denver Metro pricing, sized for altitude. Run the quick version in about a minute, or build a full spec and get a line-by-line number with your 2026 Xcel rebate already applied.
Free on-site quote
We file the rebate paperwork
Family-owned since 2004
Rebate programs we file for you
Xcel Energy Heat pump & AC rebates
Power Ahead Colorado $1,500 off qualifying heat pumps
Heads up: Xcel's cold-climate heat pump rebate is $2,250/ton only for systems installed and invoiced by Sept 30, 2026. On Oct 1 it drops to $1,500/ton.
01
Quick
3 questions · about a minute
02
Full spec
Sizing, add-ons, rebates · ~4 min
03 What tier of equipment?
Want the number with add-ons and your Xcel rebate?
The full spec sizes your equipment for Denver altitude and itemizes every line.
Build full spec
01 The project
What are we putting in?
02 The home
This drives equipment sizing. Denver sits at 5,280 ft, so gas equipment de-rates roughly 4% per 1,000 ft above 2,000 ft — we account for it.
Roughly when built?
Before 1980
1980 – 1999
2000 – 2010
2011 or newer
Stands in for insulation and windows.
Levels
1 story
2 stories
3+ / split level
Affects duct runs.
Basement
None / slab
Unfinished
Finished, conditioned
Adds heating load.
Rooms that never get comfortable?
No — it's even
Yes — hot or cold spots
Usually a zoning conversation.
03 What's there now
Age of existing system
Nothing there / new install
Under 10 years
10 – 20 years
Over 20 years
Where does it live?
Basement
Interior closet
Attic
Crawlspace
Rooftop
Ductwork
In place, decent shape
In place, needs work
No ductwork
Current furnace venting
Metal flue into a chimney
PVC out a sidewall
Not sure
80% → 96% usually needs a liner.
04 Equipment class
We install Carrier, Lennox and Trane. Every tier is a real, full-warranty system — the difference is efficiency, staging and how quiet it runs.
05 Add-ons
Everything a real quote itemizes. Tick what applies — leave anything you're unsure about and we'll confirm on site.
Always included, never a line item
06 Rebates & incentives
Active Xcel Energy natural gas account?
Yes
No / not sure
Xcel's 2026 heat pump rebate requires one.
Estimated range
—
Answer the first question to see a number.
Step 04
Lock in the real number.
Free on-site quote on any replacement. We run the Manual J, pull the permit, file your Xcel paperwork and haul the old equipment out. No pressure, no gimmick.
Sent. We'll call you.
Your spec and estimate are in front of our team. Someone from Hytek will reach out to schedule the free on-site quote.
No heat or no cooling right now? Call and we'll move you up the board.
Call (303) 627-3395
Estimated range
—
Get exact quote
Frequently Asked Questions Straight answers from a family-owned shop in Centennial. Still stuck? Call and ask.
How accurate is the HVAC cost estimator? It is built from our real pricing and gives a solid planning range. It cannot see your ductwork, electrical, venting or how the last install was done, so the firm number comes from an on-site quote. It will get you close enough to budget.
Does using the estimator commit me to anything? No. It is there so you can get oriented on cost before talking to anyone, which is how most people would prefer to start.
Why does the estimate change so much with efficiency tier? Higher-efficiency equipment costs more up front and less to run, and it usually unlocks larger rebates. On a long Colorado heating season the operating difference compounds, which is why the tier is worth thinking about rather than defaulting to the cheapest box.
Are rebates included in the estimate? The estimator shows equipment and installation. Xcel rebates of up to $10,000 on qualifying systems, plus federal heat pump credits, come off on top we work those out with you on the quote.
What happens after I get an estimate? Call (303) 627-3395 or
request a visit and we will confirm the real number on site. No obligation attached to the estimate.
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
The technical storage or access that is used exclusively for statistical purposes.
The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage consent
(function(){var d=document.getElementById("hx-deadline");if(d&&Date.now()<Date.parse("2026-10-01T00:00:00-06:00")){d.hidden=false;}})();
(function(){
"use strict";
/* ══════════════════════════════════════════════════════════════════
CONFIG — everything Tyler or Jessica might want to change
══════════════════════════════════════════════════════════════════ */
var CFG = {
endpoint : "/wp-admin/admin-ajax.php",
action : "hytek_estimator_lead",
fallback : "/contact/",
phone : "(303) 627-3395",
phoneRaw : "3036273395",
/* ── BASE EQUIPMENT BANDS ───────────────────────────────────────
Straight off hytekairsystems.com/hvac-cost-guide/ — installed,
standard swap. The tool never prints a base number outside these. */
band : {
furnace : [3500, 8500],
ac : [3800, 10000],
combo : [7300, 18500],
heatpump : [6000, 15000],
water : [900, 2800]
},
/* ── ADD-ONS ────────────────────────────────────────────────────
flag:true = typical Denver Metro range, NOT yet confirmed by Hytek.
Shows an amber rule and a * in the ledger until Tyler signs off.
'when' controls which projects the add-on is offered on. */
addons : [
{k:"stat", n:"Smart thermostat", d:"Ecobee or Nest, supplied and installed", p:[325,650], flag:true, when:"any"},
{k:"humid", n:"Whole-home humidifier", d:"Denver air is dry — this is the fix", p:[650,1250], flag:true, when:"heat"},
{k:"filter", n:"Media filter cabinet", d:"4\" or 5\" cabinet, one filter a year", p:[425,850], flag:true, when:"any"},
{k:"iaq", n:"Whole-home air purifier", d:"UV or polarized media, allergy relief", p:[850,1900], flag:true, when:"any"},
{k:"zone", n:"Zoning system", d:"Two zones, dampers and control panel", p:[1800,3600], flag:true, when:"any"},
{k:"lineset", n:"New refrigerant line set",d:"Required on most R-454B changeovers", p:[650,1400], flag:true, when:"cool"},
{k:"elec", n:"Electrical / panel work", d:"Dedicated circuit or panel capacity", p:[450,2800], flag:true, when:"any"},
{k:"gas", n:"Gas line modification", d:"Resize or reroute to the new unit", p:[350,900], flag:true, when:"heat"},
{k:"liner", n:"Chimney flue liner", d:"Needed going 80% to 96% off a chimney", p:[650,1500], flag:true, when:"heat"},
{k:"duct", n:"Duct modifications", d:"Return air, plenums, transitions", p:[600,2400], flag:true, when:"any"},
{k:"pump", n:"Condensate pump", d:"When gravity drain isn't available", p:[175,350], flag:true, when:"any"},
{k:"pad", n:"Pad, roof rig or crane", d:"Set the outdoor unit safely", p:[250,1800], flag:true, when:"cool"},
{k:"access", n:"Tight access labor", d:"Attic or crawlspace equipment swap", p:[250,900], flag:true, when:"any"},
{k:"surge", n:"Surge protection", d:"Protects the board and inverter", p:[195,395], flag:true, when:"any"},
{k:"warr", n:"10-year labor warranty", d:"Extends past the standard coverage", p:[450,950], flag:true, when:"any"},
{k:"wh", n:"Water heater replacement",d:"Published Hytek pricing — do it now", p:[900,2800], flag:false, when:"any"}
],
included : [
"Manual J load calculation",
"Permit and inspection",
"Old equipment haul-away",
"Startup and commissioning",
"Xcel rebate paperwork filed for you",
"Manufacturer warranty registration"
],
ctaPoints : [
"We size it with a real Manual J, not a rule of thumb",
"Permit pulled and inspection scheduled by us",
"Every Xcel rebate form filed on your behalf",
"0% financing available on qualifying installs"
],
/* ── INCENTIVES — verified September 2026 ───────────────────────
Xcel CO 2026 residential:
cold-climate heat pump ... $2,250 per heating ton (rated 5F)
standard heat pump ....... $900 per cooling ton
heat pump water heater ... $2,250 flat
central air conditioner .. up to $400
gas furnace .............. DISCONTINUED 1 Jan 2026
Requires an active Xcel natural gas account. Invoiced by 12/31/26.
Colorado state heat pump credit: $1,000 in 2026, upfront discount.
FEDERAL: Section 25C ended 31 Dec 2025 (OBBBA, PL 119-21). No federal
HVAC tax credit for 2026 installs. Do not imply one. */
reb : {
/* Xcel enhanced amounts step down 1 Oct 2026 (install + invoice by 30 Sep
to keep them). Switches automatically on the visitor's clock. */
late : Date.now() >= Date.parse("2026-10-01T00:00:00-06:00"),
hpCold : (Date.now() >= Date.parse("2026-10-01T00:00:00-06:00")) ? 1500 : 2250,
hpStd : (Date.now() >= Date.parse("2026-10-01T00:00:00-06:00")) ? 600 : 900,
hpWaterFlat : (Date.now() >= Date.parse("2026-10-01T00:00:00-06:00")) ? 1500 : 2250,
suffix : (Date.now() >= Date.parse("2026-10-01T00:00:00-06:00")) ? "" : ". This rate needs install + invoice by Sept 30, 2026; it drops to $1,500/ton Oct 1.",
acMax : 400,
furnace : 0,
stateHP : 1000,
capPct : 0.55 /* utilities don't pay more than the job is worth */
},
financeMonths : 60
};
/* ══════════════════════════════════════════════════════════════════
ICONS — inline, 1.6px stroke. No emoji anywhere in this tool.
══════════════════════════════════════════════════════════════════ */
function ic(p,s){return '<svg viewBox="0 0 24 24" width="'+(s||24)+'" height="'+(s||24)+'" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">'+p+'</svg>'}
var I = {
furnace : ic('<rect x="5" y="2.5" width="14" height="19" rx="1.5"/><path d="M5 9h14M9 13v5M12 13v5M15 13v5"/>'),
ac : ic('<rect x="2.5" y="6" width="19" height="8.5" rx="1.5"/><path d="M6 10h12M7 18l1.5-3.5M12 18.5v-4M17 18l-1.5-3.5"/>'),
both : ic('<path d="M3 21V9l6-4.5V21M9 21V4.5L15 9v12M15 12h6v9M12 21h9M2 21h20"/>'),
hp : ic('<circle cx="12" cy="12" r="8.5"/><path d="M12 3.5v17M3.5 12h17M6 6l12 12M18 6L6 18"/>'),
water : ic('<path d="M12 2.7s5.8 6.1 5.8 10.3a5.8 5.8 0 1 1-11.6 0C6.2 8.8 12 2.7 12 2.7z"/>'),
wrench : ic('<path d="M14.5 6.2a4.6 4.6 0 0 0 5.9 5.9l-8.4 8.4a2.4 2.4 0 0 1-3.4 0l-2.5-2.5a2.4 2.4 0 0 1 0-3.4z"/><path d="M14.5 6.2 17 3.7a4.6 4.6 0 0 1 3.4 3.4z"/>'),
shield : ic('<path d="M12 2.6 4.5 6v6c0 4.6 3.2 8.4 7.5 9.4 4.3-1 7.5-4.8 7.5-9.4V6z"/><path d="M9 12l2.2 2.2L15.5 10"/>'),
home : ic('<path d="M3.5 10.5 12 4l8.5 6.5V20a1 1 0 0 1-1 1h-15a1 1 0 0 1-1-1z"/>'),
gauge : ic('<path d="M4 18a8.5 8.5 0 1 1 16 0"/><path d="M12 18l4-5.5"/><circle cx="12" cy="18" r="1.4"/>'),
bolt : ic('<path d="M13.5 2.5 5 13.5h6l-.5 8L19 10.5h-6z"/>'),
split : ic('<rect x="2.5" y="4" width="12" height="6.5" rx="1.2"/><rect x="9.5" y="14" width="12" height="6.5" rx="1.2"/>'),
tick : '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 12.5l5 5 10-11"/></svg>',
tickS : '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 12.5l5 5 10-11"/></svg>'
};
/* ══════════════════════════════════════════════════════════════════
OPTION SETS
══════════════════════════════════════════════════════════════════ */
var OPT = {
q_job:[
{v:"install", i:I.both, t:"Replace or install", s:"Furnace, AC, heat pump or a full system"},
{v:"repair", i:I.wrench, t:"Repair something", s:"Not heating, not cooling, acting up"},
{v:"tuneup", i:I.shield, t:"Tune-up or plan", s:"Seasonal maintenance"}
],
q_size:[
{v:"s", i:I.home, t:"Under 1,500", s:"sq ft"},
{v:"m", i:I.home, t:"1,500 – 2,500", s:"sq ft"},
{v:"l", i:I.home, t:"2,500 – 3,500", s:"sq ft"},
{v:"xl", i:I.home, t:"Over 3,500", s:"sq ft"}
],
q_tier:[
{v:"good", i:I.gauge, t:"Reliable", s:"Best price, proven equipment"},
{v:"better", i:I.gauge, t:"High efficiency", s:"Best rebate value"},
{v:"best", i:I.bolt, t:"Top tier", s:"Variable speed, quietest"}
],
f_scope:[
{v:"furnace", i:I.furnace, t:"Furnace only", s:"Gas furnace replacement"},
{v:"ac", i:I.ac, t:"Air conditioner only", s:"Central AC replacement or first install"},
{v:"combo", i:I.both, t:"Furnace + AC", s:"Full system — the better buy when both are aging"},
{v:"heatpump", i:I.hp, t:"Heat pump", s:"All-electric. Carries the biggest 2026 Xcel rebate"},
{v:"dual", i:I.hp, t:"Dual fuel", s:"Cold-climate heat pump + gas furnace backup"},
{v:"ductless", i:I.split, t:"Ductless mini-split", s:"No ductwork, or an addition, garage or sunroom"},
{v:"water", i:I.water, t:"Water heater", s:"Tank, tankless or heat pump water heater"}
],
f_tier:[
{v:"good", i:I.gauge, t:"Reliable", s:"Single stage. Does the job, priced tight.",
spec:"80% AFUE furnace\n14.3 SEER2 AC\n10-yr parts warranty"},
{v:"better",i:I.gauge, t:"High efficiency", s:"Two-stage. Where most Denver homes land.",
spec:"96% AFUE two-stage\n16 SEER2 AC\n10-yr parts warranty"},
{v:"best", i:I.bolt, t:"Top tier", s:"Modulating and variable speed. Quietest, most even.",
spec:"97–98% AFUE modulating\n18+ SEER2 variable\n10-yr parts + best rebate"}
]
};
/* ══════════════════════════════════════════════════════════════════
STATE + HELPERS
══════════════════════════════════════════════════════════════════ */
var S = {mode:"quick", q_job:null, q_size:"m", q_tier:"better", f_scope:null, f_tier:"better", addons:{}};
var root = document.getElementById("hx");
var $ = function(s,c){return (c||root).querySelector(s)};
var $$ = function(s,c){return [].slice.call((c||root).querySelectorAll(s))};
function usd(n){return "$"+Math.round(n).toLocaleString("en-US")}
function r50(n){return Math.round(n/50)*50}
function clamp(n,a,b){return n<a?a:n>b?b:n}
function tileHTML(o){
return '<button type="button" class="hx-tile" data-v="'+o.v+'" aria-pressed="false">'+
o.i+'<span style="flex:1"><b>'+o.t+'</b><span>'+o.s+'</span></span>'+
(o.spec?'<span class="hx-spec">'+o.spec.replace(/\n/g,"<br>")+'</span>':'')+'</button>';
}
function tiles(){
$$("[data-radio]").forEach(function(box){
var key = box.getAttribute("data-radio"), set = OPT[key]; if(!set) return;
box.innerHTML = set.map(tileHTML).join("");
$$(".hx-tile",box).forEach(function(b){ if(S[key]===b.getAttribute("data-v")) b.setAttribute("aria-pressed","true"); });
box.addEventListener("click",function(e){
var b = e.target.closest(".hx-tile"); if(!b) return;
$$(".hx-tile",box).forEach(function(x){x.setAttribute("aria-pressed","false")});
b.setAttribute("aria-pressed","true");
S[key] = b.getAttribute("data-v");
render();
});
});
}
/* which add-ons make sense for the chosen project */
var SCOPE_KIND = {
furnace:["heat"], ac:["cool"], combo:["heat","cool"],
heatpump:["cool"], dual:["heat","cool"], water:[], ductless:["cool"]
};
function addonApplies(a, scope){
if(a.when === "any") return true;
if(!scope) return true;
return (SCOPE_KIND[scope] || []).indexOf(a.when) > -1;
}
/* things the answers tell us to suggest, without silently charging for them */
function recommended(){
var r = {}, scope = S.f_scope,
vent = ($("#f_vent")||{}).value, hot = ($("#f_hot")||{}).value,
duct = ($("#f_duct")||{}).value, age = ($("#f_age")||{}).value;
if(/furnace|combo|dual/.test(scope) && vent === "chimney" && S.f_tier !== "good")
r.liner = "A 96% furnace vents in PVC — your chimney needs a liner for the water heater.";
if(hot === "yes") r.zone = "You told us some rooms never get comfortable.";
if(duct === "rough") r.duct = "You flagged the ductwork as needing work.";
if(/ac|combo|heatpump|dual/.test(scope) && age === "old")
r.lineset = "On a 20+ year changeover the old line set almost never carries over.";
return r;
}
function addons(){
$("#hx_addons").addEventListener("click",function(e){
var b = e.target.closest(".hx-add"); if(!b) return;
var k = b.getAttribute("data-k");
if(b.getAttribute("aria-pressed")==="true") delete S.addons[k]; else S.addons[k]=1;
render();
});
$("#hx_included").innerHTML = CFG.included.map(function(t){
return "<li>"+I.tickS+"<span>"+t+"</span></li>";
}).join("");
$("#hx_ctalist").innerHTML = CFG.ctaPoints.map(function(t){
return "<li>"+I.tickS+"<span>"+t+"</span></li>";
}).join("");
}
function paintAddons(){
var box = $("#hx_addons"), rec = recommended();
box.innerHTML = CFG.addons.filter(function(a){ return addonApplies(a, S.f_scope) }).map(function(a){
var on = !!S.addons[a.k], why = rec[a.k];
return '<button type="button" class="hx-add'+(a.flag?" is-flag":"")+(why?" is-rec":"")+'" data-k="'+a.k+'" aria-pressed="'+on+'">'+
'<span class="hx-box">'+I.tick+'</span>'+
'<span class="hx-add-t"><b>'+a.n+(why?'<em class="hx-rec">Recommended</em>':'')+'</b>'+
'<span>'+(why || a.d)+'</span></span>'+
'<span class="hx-add-p">'+usd(a.p[0])+"–"+usd(a.p[1])+'</span></button>';
}).join("");
Object.keys(S.addons).forEach(function(k){
var a = CFG.addons.filter(function(x){return x.k===k})[0];
if(a && !addonApplies(a, S.f_scope)) delete S.addons[k];
});
}
/* ══════════════════════════════════════════════════════════════════
SIZING — Manual-J-lite, altitude aware, tuned for Denver's dry air
══════════════════════════════════════════════════════════════════ */
var SQFT_PER_TON = {pre1980:600, e80s:700, e00s:800, new:900};
var BTU_PER_SQFT = {pre1980:35, e80s:30, e00s:26, new:22};
var AFUE = {good:.80, better:.96, best:.975};
var ALT_DERATE = 0.87; /* 5,280 ft, ~4% per 1,000 ft over 2,000 */
var STD_FURNACE = [40,60,80,100,120];
function sized(){
var sqft = +$("#f_sqft").value || 2200;
var era = $("#f_era").value;
var base = sqft;
if($("#f_stories").value === "3") base *= 1.04;
var tons = clamp(Math.round((base / SQFT_PER_TON[era]) * 2) / 2, 1.5, 5);
var heatMul = {none:1, unfin:1.03, fin:1.08}[$("#f_basement").value] || 1;
var outBtu = base * BTU_PER_SQFT[era] * heatMul;
var need = (outBtu / AFUE[S.f_tier]) / ALT_DERATE;
var kbtu = STD_FURNACE.filter(function(x){return x*1000 >= need})[0] || 120;
return {sqft:Math.round(base), tons:tons, kbtu:kbtu, era:era};
}
/* ══════════════════════════════════════════════════════════════════
PRICING — always lands inside the published band
══════════════════════════════════════════════════════════════════ */
var TIERF = {good:0, better:.45, best:1};
function bandPrice(which, frac){var b=CFG.band[which];return b[0]+clamp(frac,0,1)*(b[1]-b[0])}
function acBase(t,tier){return bandPrice("ac", .55*((t-1.5)/3.5) + .45*TIERF[tier])}
function fnBase(k,tier){return bandPrice("furnace", .50*((k-40)/80) + .50*TIERF[tier])}
function hpBase(t,tier){return bandPrice("heatpump",.55*((t-1.5)/3.5) + .45*TIERF[tier])}
function baseFor(scope, sz, tier){
switch(scope){
case "furnace": return {v:fnBase(sz.kbtu,tier), band:CFG.band.furnace, lbl:"Furnace, installed"};
case "ac": return {v:acBase(sz.tons,tier), band:CFG.band.ac, lbl:"Air conditioner, installed"};
case "combo": return {v:clamp((fnBase(sz.kbtu,tier)+acBase(sz.tons,tier))*.93, CFG.band.combo[0], CFG.band.combo[1]),
band:CFG.band.combo, lbl:"Furnace + AC system, installed"};
case "heatpump": return {v:hpBase(sz.tons,tier), band:CFG.band.heatpump, lbl:"Heat pump, installed"};
case "dual": return {v:(hpBase(sz.tons,tier)+fnBase(sz.kbtu,tier))*.92,
band:[CFG.band.heatpump[0]+CFG.band.furnace[0], CFG.band.heatpump[1]+CFG.band.furnace[1]],
lbl:"Dual fuel system, installed"};
case "water": return {v:bandPrice("water",.5), band:CFG.band.water, lbl:"Water heater, installed"};
case "ductless": return {custom:true, lbl:"Ductless mini-split"};
}
return null;
}
function conditionBump(base){
var m = 1, loc = $("#f_loc").value;
if($("#f_duct").value === "rough") m += .05;
if(loc === "attic" || loc === "crawl") m += .04;
if(loc === "roof") m += .07;
if($("#f_age").value === "old") m += .03;
return base * m;
}
function addonTotal(){
var lo=0, hi=0, rows=[];
CFG.addons.forEach(function(a){
if(!S.addons[a.k]) return;
lo += a.p[0]; hi += a.p[1];
rows.push({n:a.n, lo:a.p[0], hi:a.p[1], flag:a.flag});
});
return {lo:lo, hi:hi, rows:rows};
}
/* ══════════════════════════════════════════════════════════════════
INCENTIVES — 2026
══════════════════════════════════════════════════════════════════ */
function incentives(scope, sz, equipCost){
var out=[], total=0, R=CFG.reb,
xcelOk = ($("#f_xcel")||{value:"yes"}).value === "yes",
cap = Math.round((equipCost||0) * R.capPct);
if(scope === "heatpump" || scope === "dual"){
if(xcelOk){
var raw = R.hpCold * sz.tons, amt = r50(Math.min(raw, cap));
out.push({n:"Xcel cold-climate heat pump", v:amt,
note: amt < raw
? "$"+R.hpCold.toLocaleString()+" per heating ton × "+sz.tons+" tons, capped at the program's share of project cost"+(R.suffix||"")
: "$"+R.hpCold.toLocaleString()+" per heating ton × "+sz.tons+" tons"+(R.suffix||"")});
total += amt;
} else {
out.push({n:"Xcel heat pump rebate", v:0, note:"Needs an active Xcel natural gas account"});
}
out.push({n:"Colorado heat pump tax credit", v:R.stateHP, note:"Applied as an upfront discount on your invoice"});
total += R.stateHP;
}
else if(scope === "ac" || scope === "combo"){
if(xcelOk){ out.push({n:"Xcel central AC rebate", v:R.acMax, note:"Up to, by efficiency tier"}); total += R.acMax; }
}
if(scope === "furnace" || scope === "combo" || scope === "dual")
out.push({n:"Xcel gas furnace rebate", v:0, note:"Xcel discontinued this 1 Jan 2026"});
out.push({n:"Federal tax credit", v:0, note:"Section 25C expired 31 Dec 2025 — nothing federal for 2026 installs"});
return {rows:out, total:total};
}
/* ══════════════════════════════════════════════════════════════════
RENDER
══════════════════════════════════════════════════════════════════ */
function row(a,b){return '<div class="hx-spec-row"><span>'+a+'</span><span>'+b+'</span></div>'}
function led(h,rows){
return '<div class="hx-led-h">'+h+'</div>' + rows.map(function(r){
return '<div class="hx-led-row"><span>'+r[0]+'</span><span>'+r[1]+'</span></div>';
}).join("");
}
function sizeLabel(){return {s:"Under 1,500 sq ft",m:"1,500 – 2,500 sq ft",l:"2,500 – 3,500 sq ft",xl:"Over 3,500 sq ft"}[S.q_size]}
function tierLabel(t){return {good:"Reliable",better:"High efficiency",best:"Top tier"}[t]}
function render(){
$$("[data-showif]").forEach(function(n){
var p = n.getAttribute("data-showif").split(":");
n.hidden = S[p[0]] !== p[1];
});
$("#hx_cn").textContent = S.mode === "quick" ? "04" : "07";
if(S.mode === "full") paintAddons();
var out = S.mode === "quick" ? renderQuick() : renderFull();
$("#hx_plab").textContent = out.lab;
$("#hx_pnum").textContent = out.num;
$("#hx_pcap").textContent = out.cap;
$("#hx_slab").textContent = out.lab;
$("#hx_snum").textContent = out.num;
$("#hx_specs").innerHTML = out.specs || "";
$("#hx_ledger").innerHTML = out.ledger || "";
var net = $("#hx_net");
if(out.net){ net.hidden = false; net.innerHTML = out.net; } else net.hidden = true;
var inc = $("#hx_incnote");
if(inc) inc.innerHTML = out.incnote || "";
$("#hx_sticky").hidden = false;
}
function renderQuick(){
if(!S.q_job) return {lab:"Estimated range", num:"—", cap:"Answer the first question to see a number."};
var tons = {s:2, m:3, l:3.5, xl:4.5}[S.q_size];
var kbtu = {s:60, m:80, l:100, xl:120}[S.q_size];
if(S.q_job === "repair"){
return {lab:"Typical repair", num:"$150 – $1,200+",
cap:"Diagnostic is credited toward the repair when you move forward.",
specs: row("Service","Repair / diagnostic") + row("Home size", sizeLabel()),
ledger: led("What drives it",[
["Common — capacitor, igniter, contactor","$150 – $450"],
["Mid — blower motor, board, valve","$450 – $900"],
["Major — compressor, heat exchanger","$900 – $1,200+"]
])};
}
if(S.q_job === "tuneup"){
return {lab:"Tune-up", num:"$100 – $149", cap:"Flat rate. Service plan members get 15% off repairs, priority scheduling and no overtime charges.",
specs: row("Service","Seasonal maintenance") + row("Home size", sizeLabel()),
ledger: led("Options",[
["Furnace tune-up","$100 – $149"],
["AC tune-up","$100 – $129"],
["Service plan — 15% off repairs, priority service","Call for pricing"]
])};
}
var b = baseFor("combo", {tons:tons, kbtu:kbtu}, S.q_tier);
var lo = r50(clamp(b.v*.90, b.band[0], b.band[1]));
var hi = r50(clamp(b.v*1.12, b.band[0], b.band[1]));
return {
lab:"Estimated range", num:usd(lo)+" – "+usd(hi),
cap:"Full furnace + AC system, installed. Permits and haul-away included.",
specs: row("Home size", sizeLabel()) + row("Equipment class", tierLabel(S.q_tier)) +
row("Sized for", tons+" ton / "+kbtu+"k BTU"),
ledger: led("Published Hytek ranges",[
["Furnace replacement","$3,500 – $8,500"],
["AC installation","$3,800 – $10,000"],
["Heat pump, before rebates","$6,000 – $15,000"]
]),
net:'<p class="hx-net-l">Rebates available</p><p class="hx-net-n">Up to '+usd(CFG.reb.hpCold*4+CFG.reb.stateHP)+'</p>'+
'<p class="hx-net-s">On a cold-climate heat pump. Xcel pays $'+CFG.reb.hpCold.toLocaleString()+
' per heating ton in 2026, plus the $'+CFG.reb.stateHP.toLocaleString()+
' Colorado credit. Switch to the full spec for your actual number.</p>'
};
}
function renderFull(){
if(!S.f_scope) return {lab:"Estimated range", num:"—", cap:"Pick a project above and the estimate builds itself as you go."};
var sz = sized();
var b = baseFor(S.f_scope, sz, S.f_tier);
if(b.custom){
return {
lab:"Priced on site", num:"Custom spec",
cap:"Mini-splits price per zone and the layout decides everything. We won't guess at a number we can't stand behind.",
specs: row("Conditioned area", sz.sqft.toLocaleString()+" sq ft") +
row("Equipment class", tierLabel(S.f_tier)) +
row("Est. cooling load", sz.tons+" tons"),
ledger: led("What we price on site",[
["Outdoor condenser sizing","per load calc"],
["Indoor heads, one per zone","per room"],
["Line hide, condensate, electrical","per run"]
]),
net:'<p class="hx-net-l">Worth knowing</p><p class="hx-net-s" style="margin-top:6px">Ductless heat pumps carry the same Xcel cold-climate rebate — $'+
CFG.reb.hpCold.toLocaleString()+' per heating ton, plus the $'+CFG.reb.stateHP.toLocaleString()+
' Colorado credit. On most homes that is the single biggest incentive available in 2026.</p>',
incnote:'<p style="font-weight:800;margin-bottom:10px">Ductless incentives</p>'+
'<p>Ductless systems qualify as heat pumps for both the Xcel rebate and the Colorado tax credit. We confirm the exact amount once we size the zones.</p>'
};
}
var v = conditionBump(b.v);
var bLo = r50(clamp(v*.92, b.band[0], b.band[1]));
var bHi = r50(clamp(v*1.10, b.band[0], b.band[1]));
var ad = addonTotal();
var tLo = bLo + ad.lo, tHi = bHi + ad.hi;
var inc = incentives(S.f_scope, sz, bLo);
var nLo = Math.max(0, tLo - inc.total), nHi = Math.max(0, tHi - inc.total);
var specs = row("Conditioned area", sz.sqft.toLocaleString()+" sq ft") +
row("Equipment class", tierLabel(S.f_tier));
if(/ac|combo|heatpump|dual/.test(S.f_scope)) specs += row("Cooling size", sz.tons+" tons");
if(/furnace|combo|dual/.test(S.f_scope)) specs += row("Heating size", sz.kbtu+"k BTU input");
if(/furnace|combo|dual/.test(S.f_scope)) specs += row("Altitude de-rate", "5,280 ft applied");
var rows = [[b.lbl, usd(bLo)+" – "+usd(bHi)]];
ad.rows.forEach(function(r){ rows.push([r.n+(r.flag?" *":""), usd(r.lo)+" – "+usd(r.hi)]); });
var ledger = led("Estimate", rows) +
'<div class="hx-led-row is-total"><span>Before incentives</span><span>'+usd(tLo)+" – "+usd(tHi)+'</span></div>';
inc.rows.forEach(function(r){
ledger += '<div class="hx-led-row '+(r.v>0?"is-credit":"is-sub")+'"><span>'+r.n+'</span><span>'+
(r.v>0? "−"+usd(r.v) : "—")+'</span></div>';
});
var incnote = '<p style="font-weight:800;margin-bottom:10px">Your 2026 incentives</p>' +
inc.rows.map(function(r){
return '<div class="hx-in-row"><span>'+r.n+'<br><span style="font-size:12.5px;color:#8a7a5c">'+r.note+'</span></span>'+
'<span>'+(r.v>0?usd(r.v):"$0")+'</span></div>';
}).join("") +
'<p style="margin-top:14px;font-size:13px">These are Xcel’s published 2026 residential figures. Final amounts depend on the equipment we spec and Xcel’s approval — <b>we file every form for you.</b> Installs must be invoiced by 31 Dec 2026.</p>';
var flagged = ad.rows.some(function(r){return r.flag});
var mo = Math.round(nLo / CFG.financeMonths / 5) * 5;
var net = inc.total > 0
? '<p class="hx-net-l">Your net, after incentives</p><p class="hx-net-n">'+usd(nLo)+" – "+usd(nHi)+'</p>'+
'<p class="hx-net-s">About '+usd(mo)+'/mo at 0% for '+CFG.financeMonths+' months on approved credit.'+
(flagged?' Items marked * are typical Denver ranges we confirm on site.':'')+'</p>'
: (flagged
? '<p class="hx-net-l">Note</p><p class="hx-net-s" style="margin-top:6px">Items marked * are typical Denver Metro ranges. We confirm them on site before anything is signed.</p>'
: null);
return {
lab:"Estimated range", num:usd(tLo)+" – "+usd(tHi),
cap:b.lbl + (ad.rows.length ? " + "+ad.rows.length+" add-on"+(ad.rows.length>1?"s":"") : "") + ". Before incentives.",
specs:specs, ledger:ledger, net:net, incnote:incnote
};
}
/* ══════════════════════════════════════════════════════════════════
WIRING
══════════════════════════════════════════════════════════════════ */
function setMode(m){
S.mode = m;
root.setAttribute("data-mode", m);
$$(".hx-mode").forEach(function(b){
var on = b.getAttribute("data-mode")===m;
b.classList.toggle("is-on", on); b.setAttribute("aria-selected", on);
});
$$("[data-pane]").forEach(function(p){ p.hidden = p.getAttribute("data-pane")!==m });
render();
}
tiles(); addons();
$$(".hx-mode").forEach(function(b){ b.addEventListener("click",function(){ setMode(b.getAttribute("data-mode")); }); });
$("[data-goto]").addEventListener("click",function(){
setMode("full");
$(".hx-band-work").scrollIntoView({behavior:"smooth",block:"start"});
});
$("#f_sqft").addEventListener("input",function(){
$("#f_sqft_out").textContent = (+this.value).toLocaleString()+" sq ft";
render();
});
["f_era","f_stories","f_basement","f_hot","f_age","f_loc","f_duct","f_vent","f_xcel"].forEach(function(id){
var n = $("#"+id); if(n) n.addEventListener("change", render);
});
$("#hx_sbtn").addEventListener("click",function(){
$("#hx_ctaband").scrollIntoView({behavior:"smooth",block:"start"});
setTimeout(function(){ $("#hx_name").focus(); }, 500);
});
$("#hx_submit").addEventListener("click", function(){
var name=$("#hx_name").value.trim(), phone=$("#hx_phone").value.trim(),
zip=$("#hx_zip").value.trim(), email=$("#hx_email").value.trim(),
addr=$("#hx_addr").value.trim();
if(!name || phone.replace(/\D/g,"").length < 10 || zip.length < 5){
$("#hx_err").style.display="block"; return;
}
$("#hx_err").style.display="none";
var btn=this; btn.disabled=true; btn.textContent="Sending…";
var out = S.mode==="quick" ? renderQuick() : renderFull();
var sz = (S.mode==="full" && S.f_scope) ? sized() : null;
var payload = {
action: CFG.action,
name:name, phone:phone, email:email||"", zip:zip, address:addr,
timeline: $("#hx_when").options[$("#hx_when").selectedIndex].text,
mode: S.mode,
project: S.mode==="quick" ? (S.q_job||"") : (S.f_scope||""),
tier: S.mode==="quick" ? S.q_tier : S.f_tier,
estimate: out.num,
sizing: sz ? (sz.sqft+" sq ft · "+sz.tons+" tons · "+sz.kbtu+"k BTU (altitude adjusted)") : sizeLabel(),
addons: Object.keys(S.addons).map(function(k){
var a=CFG.addons.filter(function(x){return x.k===k})[0]; return a?a.n:k;
}).join(", ") || "none",
detail: S.mode==="full" ? [
"Built: "+$("#f_era").options[$("#f_era").selectedIndex].text,
"Levels: "+$("#f_stories").value,
"Basement: "+$("#f_basement").options[$("#f_basement").selectedIndex].text,
"Comfort issues: "+$("#f_hot").options[$("#f_hot").selectedIndex].text,
"System age: "+$("#f_age").options[$("#f_age").selectedIndex].text,
"Equipment location: "+$("#f_loc").options[$("#f_loc").selectedIndex].text,
"Ductwork: "+$("#f_duct").options[$("#f_duct").selectedIndex].text,
"Venting: "+$("#f_vent").options[$("#f_vent").selectedIndex].text,
"Xcel gas account: "+$("#f_xcel").value
].join(" | ") : "Quick estimate",
page: location.pathname
};
fetch(CFG.endpoint, {
method:"POST",
headers:{"Content-Type":"application/x-www-form-urlencoded"},
body: new URLSearchParams(payload).toString()
}).then(function(r){ return r.ok ? r.text() : Promise.reject(); })
.then(function(){ done(); })
.catch(function(){
window.location.href = CFG.fallback + "?est=1&name=" + encodeURIComponent(name) + "&phone=" + encodeURIComponent(phone);
});
if(window.dataLayer) window.dataLayer.push({event:"estimator_lead", mode:S.mode, project:payload.project});
});
function done(){
$(".hx-band-work").hidden = true;
$(".hx-modes").style.display = "none";
$(".hx-cta-l").style.display = "none";
$(".hx-form").hidden = true;
$("#hx_thanks").hidden = false;
$("#hx_sticky").hidden = true;
$(".hx-cta").style.gridTemplateColumns = "1fr";
$("#hx_ctaband").scrollIntoView({behavior:"smooth",block:"start"});
}
setMode("quick");
})();
( () => {
const lazyloadRunObserver = () => {
const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
entries.forEach( ( entry ) => {
if ( entry.isIntersecting ) {
let lazyloadBackground = entry.target;
if( lazyloadBackground ) {
lazyloadBackground.classList.add( 'e-lazyloaded' );
}
lazyloadBackgroundObserver.unobserve( entry.target );
}
});
}, { rootMargin: '200px 0px 200px 0px' } );
lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
lazyloadBackgroundObserver.observe( lazyloadBackground );
} );
};
const events = [
'DOMContentLoaded',
'elementor/lazyload/observe',
];
events.forEach( ( event ) => {
document.addEventListener( event, lazyloadRunObserver );
} );
} )();
https://hytekairsystems.com/wp-content/themes/hello-elementor/assets/js/hello-frontend.js
https://hytekairsystems.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js
https://hytekairsystems.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js
var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnX":"Share on X","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close","a11yCarouselPrevSlideMessage":"Previous slide","a11yCarouselNextSlideMessage":"Next slide","a11yCarouselFirstSlideMessage":"This is the first slide","a11yCarouselLastSlideMessage":"This is the last slide","a11yCarouselPaginationBulletMessage":"Go to slide"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},"hasCustomBreakpoints":false},"version":"4.2.3","is_static":false,"experimentalFeatures":{"e_font_icon_svg":true,"additional_custom_breakpoints":true,"container":true,"e_panel_promotions":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"nested-elements":true,"global_classes_should_enforce_capabilities":true,"e_variables":true,"e_opt_in_v4_page":true,"e_components":true,"e_interactions":true,"e_widget_creation":true,"import-export-customization":true,"e_pro_atomic_form":true,"e_pro_collection_loop":true,"mega-menu":true,"e_pro_variables":true,"e_pro_interactions":true},"urls":{"assets":"https:\/\/hytekairsystems.com\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/hytekairsystems.com\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/hytekairsystems.com\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"705dd3be41","atomicFormsSendForm":"b022c0a67c"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description","hello_header_logo_type":"logo","hello_header_menu_layout":"horizontal","hello_footer_logo_type":"logo"},"post":{"id":3640,"title":"HVAC%20Cost%20Estimator%20-%20Hytek%20Air%20Systems","excerpt":"","featuredImage":false}};
//# sourceURL=elementor-frontend-js-before
https://hytekairsystems.com/wp-content/plugins/elementor/assets/js/frontend.min.js
const eSendElementorFormsSettings = {"ajaxUrl":"https:\/\/hytekairsystems.com\/wp-admin\/admin-ajax.php","integration":"elementor","nonce":"7a8f83c09a","viewedThreshold":0.95,"viewedAction":"send_app_elementor_form_viewed","abandonedAction":"send_app_elementor_form_abandoned","formSelectors":["form.elementor-form","form.ehp-form"],"debugOn":false,"idPrefix":""}
//# sourceURL=send-app-elementor-form-tracker-js-before
https://hytekairsystems.com/wp-content/plugins/send-app/assets/js/send-app-elementor-form-tracker.js
window._googlesitekit = window._googlesitekit || {};
window._googlesitekit.contentEvents = {"postID":3640,"isSinglePost":false,"hasVimeoEmbed":false};
//# sourceURL=googlesitekit-events-provider-content-events-js-before
https://hytekairsystems.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-content-events-bb83c1a0aedefa5d25d1.js
var complianz = {"prefix":"cmplz_","debug":"","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"10","version":"7.5.5","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https://hytekairsystems.com/wp-json/complianz/v1/","locale":"lang=en&locale=en_US","set_cookies_on_root":"","cookie_domain":"","current_policy_id":"30","cookie_path":"/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https://hytekairsystems.com/wp-content/uploads/complianz/css/banner-{banner_id}-{type}.css?v=10","page_links":{"eu":{"cookie-statement":{"title":"Cookie Policy ","url":"https://hytekairsystems.com/cookie-policy-eu/"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content","iapi_nav":"fallback"};
//# sourceURL=cmplz-cookiebanner-js-extra
https://hytekairsystems.com/wp-content/plugins/complianz-gdpr/cookiebanner/js/complianz.min.js
if ('undefined' != typeof window.jQuery) {
jQuery(document).ready(function ($) {
$(document).on('elementor/popup/show', () => {
let rev_cats = cmplz_categories.reverse();
for (let key in rev_cats) {
if (rev_cats.hasOwnProperty(key)) {
let category = cmplz_categories[key];
if (cmplz_has_consent(category)) {
document.querySelectorAll('[data-category="' + category + '"]').forEach(obj => {
cmplz_remove_placeholder(obj);
});
}
}
}
let services = cmplz_get_services_on_page();
for (let key in services) {
if (services.hasOwnProperty(key)) {
let service = services[key].service;
let category = services[key].category;
if (cmplz_has_service_consent(service, category)) {
document.querySelectorAll('[data-service="' + service + '"]').forEach(obj => {
cmplz_remove_placeholder(obj);
});
}
}
}
});
});
}
//# sourceURL=cmplz-cookiebanner-js-after
https://hytekairsystems.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js
https://hytekairsystems.com/wp-includes/js/dist/hooks.min.js
https://hytekairsystems.com/wp-includes/js/dist/i18n.min.js
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/hytekairsystems.com\/wp-admin\/admin-ajax.php","nonce":"1b62fd769d","urls":{"assets":"https:\/\/hytekairsystems.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/hytekairsystems.com\/wp-json\/"},"settings":{"lazy_load_background_images":true},"popup":{"hasPopUps":true},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/hytekairsystems.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}};
//# sourceURL=elementor-pro-frontend-js-before
https://hytekairsystems.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js
https://hytekairsystems.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js
jQuery(function($){
$(window).scroll(function() {
var $window = $(window),
$body = $('body'),
$panel = $('.panel'); // change this with your own class
var scroll = $window.scrollTop() + ($window.height() / 2);
$panel.each(function () {
var $this = $(this);
if ($this.position().top <= scroll && $this.position().top + $this.height() > scroll) {
$body.removeClass(function (index, css) {
return (css.match (/(^|\s)color-\S+/g) || []).join(' ');
});
$body.removeClass(function (index, css) {
return (css.match (/(^|\s)color-\S+/g) || []).join(' ');
});
$body.addClass('color-' + $(this).data('color'));
}
});
}).scroll();
});